2015-06-22 2 views
0

Мне не удается вызвать экземпляр класса для нескольких классов в swift.Невозможно вызвать методы класса в двух разных классах swift

У меня есть три контроллера вида.

1) ViewController 2) RegistrationVC 3) WebServiceInterface

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) 

но из RegistrationVC он показывает:

не может ссылаться на 'postRequest' со списком аргументов типа '(String, postUrl: String, currentVC: RegistrationVC)'

var webServiceInterface = WebServiceInterface() 
webServiceInterface.delegate = self 
webServiceInterface.postRequest("asd", postUrl: "asd", currentVC: self) 

enter image description here

ответ

4

Проблема почти наверняка заключается в том, что ваш класс RegistrationVC не является подклассом вашего класса ViewController.

Чтобы решить эту проблему, вы должны либо изменить метод ожидать UIViewController (обратите внимание на UI) или изменить RegistrationVC быть подклассом ViewController, который когда-либо делает большинство смысла (вероятно, бывший).


Мы можем сделать больше смысла, прочитав сообщение об ошибке:

не может ссылаться на 'postRequest' со списком аргументов типа '(String, postUrl: String, currentVC: RegistrationVC)'

Эта ошибка говорит нам несколько вещей.

Прежде всего, компилятор действительно находит наш метод с именем postRequest(:postUrl:currentVC:), но проблема заключается в типах аргументов, которые мы передаем.

Компилятор считает, что мы пытаемся передать String, String и RegistrationVC. Итак, как это отличается от того, что на самом деле определено для метода?

Ну, мы получили строки правильно, поэтому это должен быть последний параметр, который является неправильным. Компилятор ожидает объект ViewController для третьего параметра, но мы пытаемся отправить RegistrationVC (который, вероятно, является подклассом UIViewController, который отличается от ViewController (который является одним из ваших собственных подклассов UIViewController и нуждается в улучшении имя).

Таким образом, лучшее решение, скорее всего, будет (в зависимости от реализации postRequest(:postUrl:currentVC:) и то, что вы делаете с currentVC: в рамках метода) просто изменить тип этого третьего параметра:

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

Здесь никаких зависимостей нет там для этих 3 классов, у меня есть 3 разных класса, и я хочу получить доступ к одному методу класса из других двух классов. – Afsara

+0

Вы можете. Но вы должны передать правильные параметры. Если вы ожидаете передать экземпляры этих двух других классов в качестве параметров (это ваша настоящая проблема здесь), то параметр, для которого вы передаете их, должен быть параметром, который может принимать оба класса. Либо общий суперкласс, либо протокол, которому они соответствуют, либо общий. – nhgrif

Смежные вопросы