gpt4 book ai didi

ios - 如果符合协议(protocol),swift 方法接受参数

转载 作者:行者123 更新时间:2023-11-28 09:38:00 24 4
gpt4 key购买 nike

我有一个名为 WebServiceProtocol 的协议(protocol)和这样的方法:

class func executeRequest(delegate:__SOMETHING__,url:String,postParameters:[String:String],headerParameters:[String:String]){
//Do something and call delegate
}

我想要一个条件参数来检查输入是否符合 WebServiceProtocol 接受它。

我打算编写一个适用于每个输入的全局类函数,可能是 ViewController 或 NSObject 类。

在 java 类中我们是这样做的:

<? extends SomeClass>

编辑 enter image description hereWeb服务.swift

import Foundation

protocol WebServiceProtocol {
func onDataReceived(data:NSDictionary!)
func onFailure()
}

class WebService:NSObject{

class func executeRequest(delegate:WebServiceProtocol,url:String,postParameters:[String:String],headerParameters:[String:String]){
if let URL: NSURL = NSURL(string: url){
var request:NSMutableURLRequest = NSMutableURLRequest(URL:URL)
request.HTTPMethod = "POST"
request.HTTPBody = arrayToHttpParams(postParameters).dataUsingEncoding(NSUTF8StringEncoding)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()){
response, data, error in
if error == nil {
if let jsonString = NSString(data: data, encoding: NSUTF8StringEncoding){
if let dictionary = Helper.parseJson(jsonString as String) {
delegate.onDataReceived(dictionary)
println(dictionary)
return;
}
}
println("failure !")
delegate.onDataReceived(nil)
}
else{
delegate.onFailure()
}
}
}
}

class func arrayToHttpParams(params:[String:String])->String{
var mergedParams = [String]();
for (key,value) in params {
mergedParams.append(key+"="+value)
}
return "&".join(mergedParams);
}
}

身份验证.swift

protocol AuthenticationLoginProtocol {
func onSuccess(data:NSDictionary)
func onFailure(data:NSDictionary)
}

class Authentication:NSObject,WebServiceProtocol{

func attempLogin(delegate:ViewController,emial:String,password:String){

var params = [String:String]();
params["key1"]="value1"
params["key2"]="value2"

WebService.executeRequest(self, url: "", postParameters: params, headerParameters: params)

}

func onDataReceived(data: NSDictionary!) {

}
func onFailure() {

}

}

最佳答案

更新

您正试图在 type 方法中引用一个实例。而不是这个,

WebService.executeRequest(self, url: "", postParameters: params, headerParameters: params)

这样写:

WebService.executeRequest(Authentication.self, url: "", postParameters: params, headerParameters: params)

然后在例如 Authentication 中:

class Authentication: NSObject, WebServiceProtocol {

// ...

func someMethod() {
WebService.executeRequest(self, url: "", postParameters: ["1": "2"], headerParameters: ["1": "2"])
}

// ...
}

原始答案

您可以为您的协议(protocol)创建一个带有类型约束的通用函数:

func myFunc<T: WebServiceProtocol>(input: T) {
// input surely conforms to WebServiceProtocol
}

这样,T 可以是任何类型,只要它符合 WebServiceProtocol

有关更多详细信息,请参阅类型约束 here .

关于ios - 如果符合协议(protocol),swift 方法接受参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30238063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com