Swift:如何将闭包参数从 class 方法传递给 class 中的函数
Swift: How to pass closure argument from a class method to a function in the class
我在我的应用程序中定义了这个 class 来处理对我的后端的请求
class BackendService {
// Retrieves user chat channels
class func getChatChannels(success:(response: Response)->(), failure: (response:Response)->()) {
let chatsURL = baseURL + "/chats"
performRequestWith(success, failure: failure, url: chatsURL, parameters: nil)
}
func performRequestWith(success:(response: Response)->(), failure: (response: Response) -> (), url: String, parameters: String?) {
var manager = Alamofire.Manager.sharedInstance
let keychain = Keychain(service:"com.domain.app")
let token = keychain.get("token")
if let token = token {
manager.session.configuration.HTTPAdditionalHeaders = ["Authorization": "Bearer \(token)"]
manager.request(.GET, url, parameters:nil).responseJSON { (req, res, json, err) in
if(err != nil) {
var response = Response()
response.error = err
failure(response: response)
} else {
var response = Response()
if let httpStatus = HTTPStatus(rawValue: res!.statusCode) {
response.httpStatus = httpStatus
}
response.payload = JSON(json!)
success(response: response)
}
}
}
}
}
我正在尝试将 getChatChannels
收到的 callback/closure 个参数传递给 performRequestWith
。在 performRequestWith(success, failure: failure, url: chatsURL, parameters: nil)
我得到 Extra argument 'failure' in call
我对 Swift 没有什么经验,我显然在这里做错了一些事情。非常感谢您的帮助。
您的方法调用代码没有问题。
问题是您正在从 class 方法调用实例方法。
或者您应该将这两种方法都更改为 class 方法,例如:
class func getChatChannels(success:(response: Response)->(), failure: (response:Response)->())
{
let chatsURL = baseURL + "/chats"
performRequestWith(success, failure: failure, url: chatsURL, parameters: nil)
}
class func performRequestWith(success:(response: Response)->(), failure: (response: Response) -> (), url: String, parameters: String?)
{
// Your code
}
或将两者都更改为实例方法,例如:
func getChatChannels(success:(response: Response)->(), failure: (response:Response)->())
{
let chatsURL = baseURL + "/chats"
performRequestWith(success, failure: failure, url: chatsURL, parameters: nil)
}
func performRequestWith(success:(response: Response)->(), failure: (response: Response) -> (), url: String, parameters: String?)
{
// Your code
}
另一种选择是在 class 方法中创建 class 的实例,并使用该实例调用实例方法。
我在我的应用程序中定义了这个 class 来处理对我的后端的请求
class BackendService {
// Retrieves user chat channels
class func getChatChannels(success:(response: Response)->(), failure: (response:Response)->()) {
let chatsURL = baseURL + "/chats"
performRequestWith(success, failure: failure, url: chatsURL, parameters: nil)
}
func performRequestWith(success:(response: Response)->(), failure: (response: Response) -> (), url: String, parameters: String?) {
var manager = Alamofire.Manager.sharedInstance
let keychain = Keychain(service:"com.domain.app")
let token = keychain.get("token")
if let token = token {
manager.session.configuration.HTTPAdditionalHeaders = ["Authorization": "Bearer \(token)"]
manager.request(.GET, url, parameters:nil).responseJSON { (req, res, json, err) in
if(err != nil) {
var response = Response()
response.error = err
failure(response: response)
} else {
var response = Response()
if let httpStatus = HTTPStatus(rawValue: res!.statusCode) {
response.httpStatus = httpStatus
}
response.payload = JSON(json!)
success(response: response)
}
}
}
}
}
我正在尝试将 getChatChannels
收到的 callback/closure 个参数传递给 performRequestWith
。在 performRequestWith(success, failure: failure, url: chatsURL, parameters: nil)
我得到 Extra argument 'failure' in call
我对 Swift 没有什么经验,我显然在这里做错了一些事情。非常感谢您的帮助。
您的方法调用代码没有问题。 问题是您正在从 class 方法调用实例方法。
或者您应该将这两种方法都更改为 class 方法,例如:
class func getChatChannels(success:(response: Response)->(), failure: (response:Response)->())
{
let chatsURL = baseURL + "/chats"
performRequestWith(success, failure: failure, url: chatsURL, parameters: nil)
}
class func performRequestWith(success:(response: Response)->(), failure: (response: Response) -> (), url: String, parameters: String?)
{
// Your code
}
或将两者都更改为实例方法,例如:
func getChatChannels(success:(response: Response)->(), failure: (response:Response)->())
{
let chatsURL = baseURL + "/chats"
performRequestWith(success, failure: failure, url: chatsURL, parameters: nil)
}
func performRequestWith(success:(response: Response)->(), failure: (response: Response) -> (), url: String, parameters: String?)
{
// Your code
}
另一种选择是在 class 方法中创建 class 的实例,并使用该实例调用实例方法。