以下のコードで、AlamofireとSwiftyjsonのおかげで、サーバーにHTTPリクエストを発行してJSONオブジェクトを取得できます。Alamofire/Swiftyjson - JSONタイプをObjcプロトコルデリゲートに渡す
しかし、SwiftyjsonのカスタムクラスJSONを代理メソッドの引数として渡すことができません。
このエラーを修正するにはどうすればよいですか?エラーと
コード行:
optional func didReceiveUserInfo(userInfo: JSON) //This the line I get the error
エラー:パラメータのタイプはここでのObjective-C
内で表現することができないので メソッド@objcプロトコルのメンバーになることはできませんがいっぱいですコードを使用しています:
import UIKit
import Alamofire
import SwiftyJSON
@objc protocol UserModelDelegate {
optional func didReceiveUserInfo(userInfo: JSON) //This is the line I get the error
}
class UserModel: NSObject, NSURLSessionDelegate {
// Instantiate the delegate
var delegate: UserModelDelegate?
override init() {
super.init()
}
func getUserInfo(token: String) {
let url = "http://test.app/api/userInfo"
let headers = [
"Authorization":"Bearer \(token)",
"Content-Type": "application/x-www-form-urlencoded"
]
Alamofire.request(.GET, url, headers: headers).responseJSON { response in
switch response.result {
case .Success(let data):
let json = JSON(data)
self.delegate?.didReceiveUserInfo?(json) //This is where I pass the JSON custom class type as an argument
case .Failure(let error):
print("Request failed with error: \(error)")
}
}
}
}
あなたの 'var delegate:UserModelDelegate? 'を' weak var delegate:UserModelDelegate?'に変更して、保持サイクルを避けることをお勧めします。 – bitsoverflow