Search code examples
objective-cswiftnsstringnsdata

error while converting NSData objectiveC code to swift


I tried converting this code in Objective C to 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 = @"";

}

below is my swift code.

@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 = ""

    }

I get an error telling that a data is an extra argument. Please help me solve this.


Solution

  • There is no NSData(Data :response , dataUsingEncoding:NSASCIIStringEncoding) method. You are probably looking for

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

    your whole code should look like this:

    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")
    }
    

    use let when ever possible, and check if the failable initalizers return a value