2016-09-17 10 views
2

私は 3迅速に迅速2を変換すると、次のメッセージが表示さが((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(:を使用して)'あなたの呼び出しをどうするか分からない。本当に 'data2'とは何ですか? – Rob

+0

data2はjsonオブジェクトです – CK8

+0

'data(using:UInt)'は 'NSString'のメソッドで、' data(String.Encodingを使用) 'は' String'のメソッドです。したがって、 'data2'が文字列でない場合、あなたのコードは意味を持ちません。あなたは_'data2'が** JSONオブジェクトの**文字列表現**であることを意味しますか?もしそうなら、 'AnyObject'を' String'に置き換えてください。 – OOPer

答えて

0

非関数型の値を呼び出すことはできませんあなたは

data2がでlet 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(using:)を使用していないのhttpから受信

Data/NSDataです

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

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

残念ですが、データ2はオブジェクトです= try JSONSerialization.jsonObject(with:data !, options:.allowFragments) – CK8

+0

改訂版の回答を参照してください。結論として、 'JSONSerialization'が返す' Any'オブジェクトを使って 'JSON(object)'を呼び出すか、簡単に、 'Data'パラメータを取るメソッドを変更し、' JSONSerialization'を全く呼び出さず、SwiftyJSONそれをあなたのためにしてください。 – Rob

1

ご協力いただきありがとうございます。皆様のご協力ありがとうございます。 試してみて、私はこのコードを変更してエラーになります。

FUNCのparseSJSON(_ DATA2:ANYOBJECT、カタログ:String)を // parseSJSON FUNC(_ DATA2:データ、カタログ: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") 
    } 

}

関連する問題