Xcode 6.3. У класі, що реалізує протокол UITextFieldDelegate, я хотів би замінити метод touchesBegan (), щоб можливо приховати клавіатуру. Якщо я уникаю помилки компілятора у специфікації функції, тоді виникає помилка компілятора, намагаючись прочитати "дотик" із Set або NSSet, або super.touchesBegan (дотики, withEvent: event) видає помилку. Одна з цих комбінацій, скомпільована в Xcode 6.2! (Отже, де знаходиться документація до Swift "Set" і як отримати елемент з нього?)
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
// Hiding the Keyboard when the User Taps the Background
if let touch = touches.anyObject() as? UITouch {
if nameTF.isFirstResponder() && touch.view != nameTF {
nameTF.resignFirstResponder();
}
}
super.touchesBegan(touches , withEvent:event)
}
Спробуйте:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) or
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent)
Помилка компілятора: перевизначення методу за допомогою селектора 'touchesBegan: withEvent:' має несумісний тип '(NSSet, UIEvent) -> ()' та
super.touchesBegan(touches , withEvent:event)
також скаржиться
'NSSet' не є неявно конвертованим у 'Set'; Ви мали на увазі використовувати "як" для явного перетворення?
Спробуйте:
override func touchesBegan(touches: Set<AnyObject>, withEvent event: UIEvent)
Помилка компілятора: Тип 'AnyObject' не відповідає протоколу 'Hashable'
Спробуйте:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent)
Помилка компілятора в
if let touch = touches.anyObject() as? UITouch
'Set' не має учасника з іменем 'anyObject', АЛЕ специфікація функції та виклик super () в порядку!
Спробуйте:
override func touchesBegan(touches: NSSet<AnyObject>, withEvent event: UIEvent) -> () or
override func touchesBegan(touches: NSSet<NSObject>, withEvent event: UIEvent)
Помилка компілятора: Не вдається спеціалізувати не загальний тип 'NSSet'