Невозможно преобразовать значение типа "NSObject -> () -> PostFeed" в ожидаемый тип аргумента "AnyObject?"
Я добавляю UISwitch
следующим образом:
let anonSwitch : UISwitch = {
let mySwitch = UISwitch()
mySwitch.on = false
mySwitch.setOn(false, animated: false);
mySwitch.tintColor = UIColor(red: (69/255.0), green: (209/255.0), blue: (153/255.0), alpha: 1.0)
mySwitch.addTarget(self, action: #selector(handleAnonSwitch), forControlEvents: .ValueChanged)
return mySwitch
}()
Теперь я получаю следующее сообщение об ошибке на self
ключевое слово в mySwitch.addTarget
:
Cannot convert value of type 'NSObject -> () -> PostFeed' to expected argument type 'AnyObject?'
я использую self
во всем моем другом addTarget
функции для UIButton
и я никогда не сталкиваюсь с этой ошибкой
1 ответ
Измени свой let
в lazy var
,
Я не уверен, что именно думает компилятор (или откуда исходит его сумасшедшее сообщение об ошибке), но я думаю, что это:
В Swift переменные, которые let
должны быть инициализированы, прежде чем вы сможете использовать self
, Одна из причин этого заключается в том, что компилятор не может проверить, что addTarget(action:forControlEvents:)
не собирается пытаться позвонить anonSwitch()
на все, что он получает за target
или сделать что-то еще, например, получить доступ к другой переменной, которая будет инициализирована после anonSwitch
, это зависит от того, завершена ли инициализация для этого объекта.
С помощью lazy var
означает, что компилятор может проверить, что значение, присвоенное anonSwitch
не будет доступен раньше self
является допустимым объектом, потому что не удастся вызвать anonSwitch
пока все остальные члены класса не будут инициализированы.