Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法在两个不同的类中调用类方法_Swift - Fatal编程技术网

Swift 无法在两个不同的类中调用类方法

Swift 无法在两个不同的类中调用类方法,swift,Swift,我无法在swift中调用多个类的类实例 我有三个视图控制器 1) 视图控制器 2) 注册VC 3) Web服务接口 具有方法的WebServiceInterface func postRequest(postString: String, postUrl:String, currentVC:ViewController){ // ... some code } 我可以从ViewController调用此方法,但不能从RegistrationVC调用 在ViewController中,这

我无法在swift中调用多个类的类实例

我有三个视图控制器

1) 视图控制器 2) 注册VC 3) Web服务接口

具有方法的WebServiceInterface

func postRequest(postString: String, postUrl:String, currentVC:ViewController){
    // ... some code
}
我可以从ViewController调用此方法,但不能从RegistrationVC调用

在ViewController中,这很好

var webServiceInterface = WebServiceInterface()
webServiceInterface.delegate = self
webServiceInterface.postRequest(str, postUrl: url, currentVC: self)
但从注册VC来看,它显示:

无法使用类型为“(String,postrl:String,currentVC:RegistrationVC)”的参数列表调用“postRequest”


问题几乎可以肯定,您的
RegistrationVC
类不是
ViewController
类的子类

要解决此问题,您应该更改方法以期望使用
UIViewController
(注意
UI
),或者将
RegistrationVC
更改为
ViewController
的子类,这是最有意义的(可能是前者)


通过阅读错误消息,我们可以更好地理解这一点:

无法使用类型为“(String,postrl:String,currentVC:RegistrationVC)”的参数列表调用“postRequest”

这个错误告诉我们一些事情

首先,编译器确实找到了名为
postRequest(:postrl:currentVC:)
的方法,但问题在于我们传递的参数类型

编译器认为我们正在尝试传递一个
字符串
字符串
,以及一个
注册VC
。那么,这与该方法的实际定义有何不同呢

嗯,字符串是对的,所以它一定是最后一个错误的参数。编译器希望第三个参数为
ViewController
对象,但我们正在尝试发送
RegistrationVC
(这可能是
UIViewController
的子类,它不同于
ViewController
(这是您自己的
UIViewController
子类之一,需要更好的名称)

因此,最好的解决方案很可能是(取决于您对
postRequest(:postrl:currentVC:)
的实现以及您在方法中使用
currentVC:
所做的操作)简单地更改第三个参数的类型:

postRequest(postString: String, postUrl: String, currentVC: UIViewController) {
    // implementation code
}

问题几乎可以肯定,您的
RegistrationVC
类不是
ViewController
类的子类

要解决此问题,您应该更改方法以期望使用
UIViewController
(注意
UI
),或者将
RegistrationVC
更改为
ViewController
的子类,这是最有意义的(可能是前者)


通过阅读错误消息,我们可以更好地理解这一点:

无法使用类型为“(String,postrl:String,currentVC:RegistrationVC)”的参数列表调用“postRequest”

这个错误告诉我们一些事情

首先,编译器确实找到了名为
postRequest(:postrl:currentVC:)
的方法,但问题在于我们传递的参数类型

编译器认为我们正在尝试传递一个
字符串
字符串
,以及一个
注册VC
。那么这与为该方法实际定义的有什么区别呢

好的,字符串是对的,所以它一定是最后一个参数出错了。编译器希望第三个参数是
ViewController
对象,但我们正在尝试发送
RegistrationVC
(这可能是
UIViewController
的一个子类,它不同于
ViewController
(这是您自己的
UIViewController
子类之一,需要更好的名称)

因此,最好的解决方案很可能是(取决于您对
postRequest(:postrl:currentVC:)
的实现以及您在方法中使用
currentVC:
所做的操作)简单地更改第三个参数的类型:

postRequest(postString: String, postUrl: String, currentVC: UIViewController) {
    // implementation code
}

这里没有这3个类的依赖关系,我有3个不同的类,我想从其他两个类访问一个类方法。你可以。但是你必须传递正确的参数。如果你希望传递这两个其他类的实例作为参数(这是你在这里的实际问题),则传递它们的参数必须是可以接受这两个类的参数。可以是公共超类、它们都符合的协议,也可以是泛型。这3个类没有依赖关系,我有3个不同的类,我想从其他两个类访问一个类方法。可以。但必须传递正确的参数。如果希望将这两个其他类的实例作为参数传递(这是您在此处实际遇到的问题),则传递它们的参数必须是可以接受这两个类的参数。可以是公共超类、它们都符合的协议,也可以是泛型。