在swift 3

时间:2017-01-06 07:10:36

标签: ios xcode swift3 nsdata

我试图通过网址发送数据,但是有些数据一直没有价值,因为用户没有更改它,所以我给它空字符串。

如果用户没有更改它,但是当我执行代码时,我会在每个重要行放置断点,并且此行中出现错误"unexpectedly found nil while unwrapping an Optional value"

 let postData:NSData = post.data(using: String.Encoding.ascii.rawValue)! as NSData
像这样发帖:

username=myusername&password=&tel=&email=myemail&address=&DOB=choose&cinsiyet=2&changedPass=false

电话,密码和地址没有价值(或者它是空字符串),因为用户没有更改它。

在这种情况下,String的编码会影响或因为所有未更改的文本字段都有"" (空字符串),我确信。

2 个答案:

答案 0 :(得分:3)

你强行展开post.data(using:)的结果。如果转换为Data失败(例如,如果帖子的编码不是您使用的其他编码),则会返回nil并使您的代码崩溃。

一般来说,如果你不确定它会成功,我会建议你永远不要使用强制展开(!)或强制投射as!。相反,您应该使用guard let声明:

guard let postData = post.data(using: String.Encoding.ascii) else {
    //an error occurred
    return
}

此外,在Swift 3中,我们不使用NSData。请改用Data

答案 1 :(得分:0)

我通过将if语句放在一个可能占用3个值的文本字段中来解决这个问题。