2015-12-23 3 views
6

В создании быстрого приложения IOS, мне нужно обрабатывать событие печати UIButton вне контроллера родительского вида, поэтому я создал (очень простой) протокол делегировать эту ответственность другого класса:Не удается преобразовать в `AnyObject?`?

import UIKit 
protocol MyButtonProtocol { 
    func buttonPressed(sender: UIButton) 
} 

Однако, когда я пытаюсь добавитьTarget в UIButton с этим протоколом, я получаю эту ошибку: Cannot convert value of type 'MyButtonProtocol' to expected argument type 'AnyObject?'. Не должно ничего быть в состоянии быть преобразовано в AnyObject?? Вот мой основной код:

import UIKit 
class MyView: UIView { 
    var delegate: MyButtonProtocol 
    var button: UIButton 
    init(delegate: MyButtonProtocol) { 
     self.delegate = delegate 
     button = UIButton() 
     //... formatting ... 
     super.init(frame: CGRect()) 
     button.addTarget(delegate, action: "buttonPressed:", forControlEvents: .TouchUpInside) 
     addSubview(button) 
     //... more formatting ... 
    } 
} 

Заранее спасибо.

ответ

10

AnyObject - протокол, которым все классов соответствовать. Чтобы определить протокол, который может приниматься только по классам, добавьте : class к определению:

protocol MyButtonProtocol : class { 
    func buttonPressed(sender: UIButton) 
} 

Без этой модификации,

var delegate: MyButtonProtocol 

может быть struct или enum типа и не конвертируется в AnyObject.

+0

простой & безупречный !! – iAnurag

0
//i hope it will work 
import UIKit 
class MyView: UIView { 
    var delegate: MyButtonProtocol 
var button: UIButton 
init(delegate: MyButtonProtocol) { 
    self.delegate = delegate 
    button = UIButton() 
    //... formatting ... 
    super.init(frame: CGRect()) 
    button.addTarget(delegate, action: Selector("buttonPressed:") forControlEvents: .TouchUpInside) 
    addSubview(button) 
    //... more formatting ... 
} 
} 
Смежные вопросы