【问题标题】:error while converting NSData objectiveC code to swift将 NSData ObjectiveC 代码转换为 swift 时出错
【发布时间】:2015-01-14 08:37:49
【问题描述】:

我尝试将 Objective C 中的这段代码转换为 Swift,

- (IBAction) sendMessage {

    NSString *response  = [NSString stringWithFormat:@"msg:%@", inputMessageField.text];
    NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
    [outputStream write:[data bytes] maxLength:[data length]];
    inputMessageField.text = @"";

}

下面是我的快速代码。

@IBAction func sendMessage() {

        var response  = NSString.localizedStringWithFormat("msg:\(inputMessageField?.text)")
        var data = NSData(Data :response , dataUsingEncoding:NSASCIIStringEncoding)
        outputStream(write:data.bytes, maxLength:data.length);
        inputMessageField?.text = ""

    }

我收到一条错误消息,指出数据是一个额外的参数。请帮我解决这个问题。

【问题讨论】:

    标签: objective-c swift nsstring nsdata


    【解决方案1】:

    没有NSData(Data :response , dataUsingEncoding:NSASCIIStringEncoding) 方法。您可能正在寻找

    let data = 
    response.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
    

    你的整个代码应该是这样的:

    let response  = NSString.localizedStringWithFormat("msg:\(inputMessageField?.text)")
    if let data = response.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
        outputStream(write:data.bytes, maxLength:data.length);
        inputMessageField?.text = ""
    }
    else {
        println("could not convert response \"\(response)\" to NSData")
    }
    

    尽可能使用 let,并检查可失败的初始化器是否返回值

    【讨论】:

    • Thanku:)(write:UnsafePointer, maxLength:Int)-> $T6 与 NSOutputstream 不同。我收到上面代码的这个错误。
    • @Jeyanthu:这应该可以:outputStream.write(UnsafePointer(data.bytes), maxLength:data.length)。另请注意,写入流实际上可能会写入 less 个字节而不是您提供的字节。比较stackoverflow.com/a/25080834/1187415
    【解决方案2】:

    您要查找的方法NSData(Data :response , dataUsingEncoding:NSASCIIStringEncoding) 不存在。

    你可以这样转换

    var data = NSData(data :response.dataUsingEncoding(NSASCIIStringEncoding)!)
    


    更新

    方法outputStream.write() 需要UInt8[] 数组,因此您必须将数据转换为UInt8[] Array

    你的代码应该是,

    @IBAction func sendMessage() {
        var response  = NSString.localizedStringWithFormat("msg:\(inputMessageField?.text)")
        var data = NSData(Data :response , dataUsingEncoding:NSASCIIStringEncoding)        
        outputStream.write(UnsafePointer(data.bytes), maxLength:data.length)
        inputMessageField?.text = ""
    }
    

    【讨论】:

    • (write:UnsafePointer, maxLength:Int)-> $T6 与 NSOutputstream 不同。我收到上面代码的这个错误
    • 这是因为outputstream 期望UInt8[] array,请查看更新后的代码
    • 以及您使用的方法outputStream(write()) 期望3 parameters 期望UnsafePointer<void>,但您不需要该方法写入流,
    • 您的buffer 只包含零,而不是来自data 的字节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多