2016-04-09 10 views
2

ich einige Selektoren Swift 2.2 migrieren, aber ich bin ein Problem mit einem von ihnen mit:Xcode 7.3, Swift 2.2: Standard initialiser Selektor (neue Kompilierung-Check)

Init string selector

Code:

let hook = ARTRealtimePresenceQuery.testSuite_injectIntoClassMethod("init") { // Default initialiser 
    presenceQueryWasCreated = true 
} 

nun Xcode wollen, dass ich den Übergang zu tun helfen, aber in einer falschen Weise:

enter image description here

Code:

let hook = ARTRealtimePresenceQuery.testSuite_injectIntoClassMethod(#selector(_NSEnumeratorType.init)) { // Default initialiser 
    presenceQueryWasCreated = true 
} 

Ich versuche, es zu beheben:

enter image description here

Code:

let hook = ARTRealtimePresenceQuery.testSuite_injectIntoClassMethod(#selector(ARTRealtimePresenceQuery.init)) { // Default initialiser 
    presenceQueryWasCreated = true 
} 

Also, meine questio n ist: Wie kann ich die Standardinitialisierungsmethode mit der neuen Syntax #selector auswählen?

(Es wurde in Swift 2.0 arbeiten.)

Aktuelle Fehler:

"mehrdeutige Verwendung von 'init()'"

UPDATE 1:

ARTRealtimePresenceQuery Initiatoren:

- (instancetype)init; 
- (instancetype)initWithClientId:(nullable NSString *)clientId connectionId:(nullable NSString *)connectionId; 
- (instancetype)initWithLimit:(NSUInteger)limit clientId:(nullable NSString *)clientId connectionId:(nullable NSString *)connectionId; 
+0

sein Ich bin nicht vertraut mit diesem Rahmen, was bedeutet 'testSuite_injectIntoClassMethod' tun, und die init Methode welcher Klasse möchten Sie verweisen? - Beachten Sie, dass Selector ("init") noch gültig ist! –

+0

@MartinR Die 'testSuite_injectIntoClassMethod' fügt einen Code-Block nach dem aktuellen' Selector' für eine bestimmte Klasse hinzu. In diesem Fall möchte ich einen Code-Block im Standard-Initialisierer von 'ARTRealtimePresenceQuery' hinzufügen. Kann ich den Selector ("init") auch ohne Warnung verwenden? Ich denke nicht. – ricardopereira

+1

Können Sie '#selector (ARTRealtimePresenceQuery.init as() -> ARTRealtimePresenceQuery) versuchen?Es sollte ohne Vorwarnung kompilieren, aber nicht wissen, ob es wie beabsichtigt funktioniert. –

Antwort

2

Wie in

gezeigt

bezogen auf die nicht-Parameter-Variante als eine von mehreren überlasteten Verfahren erfordert eine explizite as <signature> gegossen. Das Verfahren kann auch auf init Methoden angewendet werden:

class MyClass : NSObject { 

    override init() { } 

    init(s : String) { } 
} 

// Selector referring to init(): 
let sel1 = #selector(MyClass.init as() -> MyClass) 

// Selector referring to init(s : String): 
let sel2 = #selector(MyClass.init as (String) -> MyClass) 

in Ihrem Fall So wäre es

#selector(ARTRealtimePresenceQuery.init as() -> ARTRealtimePresenceQuery) 
Verwandte Themen