2015-12-23 24 views
6

Nella creazione di un rapido iOS, avevo bisogno di gestire l'evento di una pressa UIButton all'esterno del controller della vista genitore, così ho creato un (molto semplice), il protocollo di delegare questa responsabilità a una classe diversa:Impossibile convertire in `AnyObject?`?

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

Tuttavia, quando provo ad aggiungereTarget a un UIButton con tale protocollo, viene visualizzato questo errore: Cannot convert value of type 'MyButtonProtocol' to expected argument type 'AnyObject?'. Non è possibile convertire nel in AnyObject?? Ecco il mio codice principale:

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 ... 
    } 
} 

Grazie in anticipo.

risposta

10

AnyObject è il protocollo a cui sono conformi tutte le classi . Per definire un protocollo che può adottata solo dalle classi, aggiungere : class alla definizione:

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

Senza tale modifica,

var delegate: MyButtonProtocol 

può essere un tipo struct o enum e che non è convertibile in AnyObject.

+0

semplice e perfetto !! – 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 ... 
} 
}