对 Swift 还很陌生,所以请放轻松。使用继承的代码库。
出现此错误:
Cannot convert value of type '(AccountViewController) -> () -> (AccountViewController)' to expected argument type 'GetUserDelegate?'
这段代码在我的 View Controller 中。这是我编写的此示例中唯一的代码:
fileprivate var userDataSource = getAPI().getUser(delegate: self)
此代码是我的 API 定义的一部分:
func getUser(delegate: GetUserDelegate?) {
sessionManager.request(ApiRequests.user).validate().responseJSON { (response: Alamofire.DataResponse<Any>) -> Void in
switch response.result {
case .success(let value):
guard let user = Mapper<User>().map(JSONObject: value) else {
delegate?.apiError(code: nil, message: "Cannot decode user")
return
}
delegate?.getUserSuccess(user: user)
case .failure(let err):
delegate?.apiError(code: nil, message: err.localizedDescription)
}
}
}
这是协议(protocol):
protocol GetUserDelegate: APIErrorDelegate {
func getUserSuccess(user: User)
}
现在在代码的其他地方我看到类似的函数,它们传入的只是委托(delegate):self,但这似乎不起作用并给我上述错误。
我的猜测是,这是因为我是直接在类定义中设置它,而不是在其中一个类方法中设置 - 我走在正确的轨道上吗?我之前完成了大量的 OOP 编码,但我从未使用过委托(delegate)设计模式,所以我认为我并不完全理解这里的实现。
最佳答案
我想错误很明显,你应该在你的 AccountViewController
中实现这样的 GetUserDelegate
,比如:
class AccountViewController: UIViewController, GetUserDelegate {
func getUserSuccess(user: User) {
// stuff here //
}
}
关于swift - 无法转换类型 '(AccountViewController) -> () -> (AccountViewController)' 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185219/