斯威夫特还不太熟悉,所以请对我好点。使用继承的代码基。
获取此错误:

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/

10-09 06:31