无法调用非功能类型的值'((UInt) - >数据?)!'

时间:2016-09-17 22:23:24

标签: ios swift3 xcode8

当我将swift 2转换为swift 3时,会显示以下消息 无法调用非函数类型((UInt) -> Data?)!

的值
func parseSJSON(_ data2: AnyObject) {      
    /** INITIALIZE THE SESSION **/
    clearUserInfo()
    if let data = data2.data(using: String.Encoding.utf8) {
        let json = JSON(data: data)
        let userID = json["userID"].stringValue
        prefs.setValue(userID, forKey: "userID")
    }
}

2 个答案:

答案 0 :(得分:1)

感谢您的帮助,我尝试了不同的方法。 通过尝试和错误,我将我的代码更改为此,它可以工作!

func parseSJSON(_ data2:AnyObject,catalog:String)     // func parseSJSON(_ data2:Data,catalog:String)

{

    clearUserInfo()
   // if let data = data2.data(using: String.Encoding.utf8) {

   if let data = data2.data(using: String.Encoding.utf8.rawValue) {
        let json = JSON(data: data)

        let userID = json["userID"].stringValue
        prefs.setValue(userID, forKey: "userID")
  }

}

答案 1 :(得分:0)

你说

  

data2let object = try JSONSerialization.jsonObject(with: data!, options:.allowFragments)

在这种情况下,只需将其直接传递给采用JSON / NSArray的{​​{1}} init方法,即不带NSDictionary参数标签的再现:

data:

顺便说一下,如果您要自己解析它,则不需要let json = JSON(data2) // note, if parameter is `Any` (the `NSDictionary`/`NSArray` structure of parsed JSON), then do not include `data:` ,例如。

.allowFragments

或者,更简单,根本不打电话给let object = try JSONSerialization.jsonObject(with: data!, options: []) ,直接通过JSONSerialization

Data

parse(data: data!) 调用parse(data:),它将为您解析它:

JSON(data:)

以前你说func parse(data: Data) { clearUserInfo() let json = JSON(data: data) // note, if parameter is `Data`, include `data:` let userID = json["userID"].stringValue prefs.setValue(userID, forKey: "userID") }

  我从http post

收到的

data2 / Data

在这种情况下,只需投放它并且不要使用NSData,例如

.data(using:)