Только что обновлено до Xcode8 с Swift 3. К сожалению, я не могу добавить цель к кнопке, где цель относится к функции в другом классе.Swift 3 #selector и имена типов
class AddToDoViewController {
@IBOutlet weak var doneButton: UIButton!
var st : SelectorTest!
override func viewDidLoad() {
st = SelectorTest()
st.didTapButtonHandler = {
self.doneButton.isSelected = !self.doneButton.isSelected
print("self.doneButton.selected=\(self.doneButton.isSelected)")
}
doneButton.addTarget(self, action: #selector(SelectorTest.didTapTheButton(_:)), for: .touchUpInside)
}
}
class SelectorTest {
typealias ToDoCellDidTapButtonHandler =() -> Void
var didTapButtonHandler: ToDoCellDidTapButtonHandler?
@objc func didTapTheButton(_ sender: AnyObject) {
if let handler = didTapButtonHandler {
handler()
}
}
}
В этом случае цель SelectorTest.didTapButton (_ :), который существует в классе SelectorTest. Однако, когда я бегу и нажмите на кнопку Я получаю сообщение об ошибке выполнения:
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[Done.AddToDoViewController didTapTheButton:]:
unrecognized selector sent to instance
Поскольку я установил цель на кнопку, чтобы указать на
SelectorTest.didTapTheButton(_:)
, который, безусловно, существует, почему я получаю время выполнения что он не может найти didTapTheButton(_:)
на AddToDoViewController? Особенно, когда я не указал AddToDoViewController.didTapTheButton(_:)
в качестве цели?
Done.AddToDoViewController didTapTheButton:
Я интересно, если #selector
игнорирует имя класса и предполагает, что цель находится на классе, который добавил цель кнопки (AddToDoViewController)?
Как установить цель на SelectorTest.didTapTheButton(_:)
и во время выполнения выполнить SelectorTest.didTapTheButton(_:)
вместо запуска, пытающегося запустить AddToDoViewController.didTapTheButton(_:)
, который не является настроенной целью и не существует?
Спасибо, я бы думать, что вы получите ошибку во время компиляции, так как я и SelectorTest не разрешают к тому же классу. – user6902806
Welcome mate :) –
Если в AddToDoViewController: addTarget (self, action: #selector (SelectorTest.didTapTheButton (_:) ... Мне бы хотелось, чтобы я мог получить ошибку/предупреждение о компиляции с самого себя! = SelectorTest. Если вы укажете self, он игнорирует тип класса в #selector. – user6902806