2015-03-12 2 views
3

У меня есть приложение Swift с представлением, в котором есть текстовое поле и кнопка. Когда кнопка нажата, он вызывает метод ниже.Преобразование строки! to String

@IBAction func AddClick(sender: AnyObject) { 
    employeeManager.AddFirstName(firstName.text) 
} 

Я не знаю, почему я получаю следующее сообщение об ошибке:

Cannot invoke 'AddFirstName' with an argument list of type '(String!)' 

это потому, что я не могу неявно преобразовать тип String! в String?

определение добавитьЩелкните:

var employeeManager: EmployeeManager = EmployeeManager() 

class EmployeeManager { 

    func AddFirstName(firstName: String){} 

Даже если я изменить код для

func AddFirstName(firstName: String!) {} 

он все еще не работает.

Что было бы лучшим способом сделать это?

- EDIT -

Я вижу проблему. Это что-то сделать с помощью следующей строки в классе EmployeeManager:

var employeeManager: EmployeeManager = EmployeeManager() 

Если я сделаю это в добавитьЩелкните, он работает:

@IBAction func AddClick(sender: AnyObject) { 
    var e = EmployeeManager() 
    e.AddFirstName(firstName.text) 
} 

Эта линия предназначена действовать как синглтон и обеспечить доступ к окну EmployeeManager. Я сделал это неправильно?

var employeeManager: EmployeeManager = EmployeeManager() 
+0

Вы пробовали 'func employeeManager.AddFirstName (firstName: String?)' И проверяете внутри этой функции, если firstName - это строка, а не nil? –

+0

Я не считаю, что определение 'AddFirstName()' похоже. Это должно быть 'func AddFirstName (firstName: String) {' или такое. Вставьте свой фактический код. – rintaro

+0

Пробовал это, но получал ту же ошибку. Это время компиляции, а не ошибка времени выполнения. – 4thSpace

ответ

1

Проблема заключается в моем использовании

var employeeManager: EmployeeManager = EmployeeManager() 

Идущий с рисунком Singleton, который выше на самом деле предполагается вести себя, как, решает эту проблему.

+0

Я думаю, что причина, по которой шаблон работал в учебном видео, заключалась в том, что он никогда не ссылался на экземпляр «singleton» в своем собственном определении класса. То есть его метод 'addClick' обрабатывался отдельным классом. – aganders3

+0

Я тоже. Он создан из перетаскивания внутри IB. – 4thSpace

+0

Ну, тогда у меня нет идей! Кажется странным, но, может быть, просто запомните это тем, что Swift все еще меняется, и, возможно, в учебнике используется другая версия. – aganders3

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