2016-09-17 45 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") 
    } 

}

相關問題