我将一些Swift 2代码转换为Swift 3,现在我的struct不再符合协议。我明显有协议,每次我尝试重新应用它,我得到另一个错误,无效的redelacartion。我似乎无法弄清楚为什么会出现这种错误。这是我的代码,如果任何人有任何错误的建议,或在哪里看?
struct wpOauth: wpOAuthProtocol, {
typealias PropertyType = ObserverProperty
let propertyChanged = Event<ObserverProperty>()
//We'll need to access NSUserDefaults
let defaults = UserDefaults.standard
func getUserData(completionHandler: @escaping (String) -> ()) -> () {
guard let accessToken = defaults.string(forKey: "accessToken") else {
return
}
manager.request(siteUrl, method: .post, parameters: [
"access_token": accessToken
]).responseJSON { response in
guard let data = response.result.value else{
self.propertyChanged.raise(data: .NetworkError)
return
}
let json = JSON(data)
guard (json["error"].string != nil) else{
//Get username to be displayed in input field
guard let displayName = json["display_name"].string else{
return
}
completionHandler(displayName)
return
}
}
}
这是议定书
protocol wpOAuthProtocol {
func getUserData(completionHandler:(String) -> ()) -> ()
}
答案 0 :(得分:4)
协议定义与您的重新声明不匹配,这是错误消息试图说的内容。只需在@escaping
之前在协议定义中添加(String)
即可修复错误