2016-09-17 42 views
2

当我转换下面的消息显示了迅速的2至SWIFT 3 不能调用((UInt) -> Data?)!无法调用非函数类型的值((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") 
    } 
} 
+0

'data2'是一个'AnyObject' ,所以它不知道你要调用'.data(using:)'做什么。什么是'data2',真的吗? – Rob

+0

data2是一个json对象 – CK8

+0

'data(using:UInt)'是'NSString'的一个方法,'data(using:String.Encoding)'是'String'的一个方法。所以,如果'data2'不是字符串,你的代码就没有意义了。你的意思是_'data2'是JSON object_的**字符串表示**吗?如果是这样,请将'AnyObject'替换为'String'。 – OOPer

回答

0

你说

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

在非功能型的价值这种情况下,直接通过JSON init方法,需要NSArray/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") 
} 

以前你说过data2

Data /我从http收到后

在这种情况下,只投它并没有使用.data(using:),例如NSData

func parseSJSON(_ data2: AnyObject) {  
    ... 

    if let data = data2 as? Data { 
     // use `data` here 
    } 
} 
+0

收到的Data/NSData对不起,data2是let object = try JSONSerialization.jsonObject(with:data !, options:.allowFragments) – CK8

+0

请参阅修订后的答案。底线,或者使用'JSONSerialization'返回的'Any'对象调用'JSON(object)',或者更容易地改变方法来获取'Data'参数,根本不要调用'JSONSerialization',让SwiftyJSON为你做那个。 – Rob

1

感谢您的帮助,我尝试了不同的方法,他们都没有工作。 通过尝试和错误,我改变我的代码到这个,它的工作!

FUNC parseSJSON(_ DATA2:AnyObject,目录:字符串) // FUNC parseSJSON(_ DATA2:数据,目录:字符串)

{ 

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

}

相关问题