斯威夫特还不太熟悉,所以请对我好点。使用继承的代码基。
获取此错误:
Cannot convert value of type '(AccountViewController) -> () -> (AccountViewController)' to expected argument type 'GetUserDelegate?'
此代码在我的视图控制器中。这是我在这个示例中编写的唯一代码:
fileprivate var userDataSource=getAPI().getUser(委托: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 GetUserDelegate: APIErrorDelegate {
func getUserSuccess(user: User)
}
现在在代码的其他地方,我看到了类似的函数,它们传入的只是delegate:self,但这似乎不起作用,并给了我上面的错误。
我猜这是因为我是直接在类定义中设置的,而不是在一个类方法中设置的-我在这里走对了吗?我以前做过很多面向对象的编程,但是我从来没有使用过委托设计模式,所以我认为我不完全理解这里的实现。
最佳答案
我想错误很明显,您应该在GetUserDelegate
内部实现这样的AccountViewController
,比如:
class AccountViewController: UIViewController, GetUserDelegate {
func getUserSuccess(user: User) {
// stuff here //
}
}
关于swift - 无法转换类型'(AccountViewController)->()->(AccountViewController)'的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49185219/