Ссылка на протокол внутри класса приводит к следующей ошибке: ожидаемое имя члена или вызов конструктора после имени типа - PullRequest
0 голосов
/ 19 сентября 2019

Это моя текущая ситуация:

class FirstViewController: UITableViewController {
   ...
}

protocol SharedFunctions {
   func createEvent(event: Event, text: String)
}

extension FirstViewController: SharedFunctions {
   createEvent(event: Event, text: String) {
       ...
   }
}

class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
   var sharedFunctions = SharedFunctions? // < Xcode error...

   @IBAction func postChatMessageAction(_ sender: Any) {
       self.sharedFunctions.createEvent(event: event, text: "New Event")
   }
   ...
}

Ошибка: ожидаемое имя члена или вызов конструктора после имени типа

Когда я изменяю свой код, как Xcode предлагаетошибка исчезла, но я получаю сообщение об ошибке в функции createEvent

var sharedFunctions = SharedFunctions?.self //Xcode suggestion is adding .self

Теперь я получаю сообщение об ошибке в функции createEvent

@IBAction func postChatMessageAction(_ sender: Any) {
   self.sharedFunctions.createEvent(event: event, text: "New Event") // < Xcode error...
}

Ошибка: введите 'SharedFunctions?'не имеет члена 'createEvent'

Я также попробовал следующее с ошибкой:

weak var delegate = SharedFunctions? // < Xcode error...

Ошибка: «слабый» может применяться только к классу и классусвязанные типы протоколов, а не 'SharedFunctions? .Type'

Я пытаюсь из моего класса SecondViewController вызвать функцию createEvent (), которая есть в моем классе FirstViewController.

Ответы [ 3 ]

1 голос
/ 19 сентября 2019

Ваш синтаксис объявления SharedFunctions неверен.Это должно быть

weak var delegate: SharedFunctions?
0 голосов
/ 19 сентября 2019

Прежде всего, в расширении FirstViewController отсутствует ключевое слово func.Попробуйте реализовать функцию createEvent(event:text:) следующим образом:

extension FirstViewController: SharedFunctions {
   func createEvent(event: Event, text: String) {
       ...
   }
}

Кроме этого, объявление свойства sharedFunctions в SecondViewController неверно.Попробуйте следующее:

class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
   var sharedFunctions: SharedFunctions?

   @IBAction func postChatMessageAction(_ sender: Any) {
       self.sharedFunctions.createEvent(event: event, text: "New Event")
   }
   ...
}

Надеюсь, это поможет.

0 голосов
/ 19 сентября 2019

Попробуйте

class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

   //Need change here
   var sharedFunctions : SharedFunctions? // < Xcode error...

     @IBAction func postChatMessageAction(_ sender: Any) {
      self.sharedFunctions.createEvent(event: event, text: "New Event")
     }
   ...
  }
...