2016-04-05 5 views
0

Ich benutze Taifun und ich brauche Wähler für Injektionseigenschaftswift 2.2 #selector auf var

definition.injectProperty(Selector("viewModel"), with: self.viewModel.inviteViewModel()) 

aber Compiler nicht Selektor definieren var sehen.

zum Beispiel: wenn ich var viewModel: AuthViewModel! und

Einsatz haben #selector(viewModel)

so erhalte ich Argument of '#selector' cannot refer to a property

UPDATE:

ich das Problem aus gebrauchten Typhoon in Swift haben. Ich löse mein Problem wie den Verzicht auf Typhoon und wechsle zu Swinject. Auch jetzt kann ich Struktur für die Injektion und vieles mehr verwenden.

+0

Lesen Sie diese: http://StackOverflow.com/Q/36166248/2227743 – Moritz

+0

Selektor auf funktioniert es. Aber Selektor auf var nicht sehen – ajjnix

+0

bitte, fügen Sie ein Minimum Beispiel. – Sulthan

Antwort

0

Sie haben ein Missverständnis darüber, was in #selector() übergeben werden kann. Sie sollten auf jeden Fall die Stackoverflow Fragen lesen, die Eric D posted:

Überblick auf das, was Sie #selector() für verwenden können: Understanding Swift 2.2 Selector Syntax - #selector()

Der Grund, warum Sie keine Swift Eigenschaft in zu #selector() passieren kann:

Selektorverfügbarkeit: Die vom Selektor referenzierte Methode muss der ObjC-Laufzeit ausgesetzt sein. Dies ist bereits der Fall, wenn es in einer Klasse ist, die (letztendlich) von NSObject erbt, aber wenn es sich um eine reine Swift-Klasse handelt, müssen Sie die Deklaration dieser Methode mit @objc voranstellen. Denken Sie daran, dass private Symbole nicht der Laufzeitumgebung ausgesetzt sind, auch - Ihre Methode muss mindestens intern sichtbar sein.

- referenzierte von @selector() in Swift?

Kurz gesagt, können Sie in einem var und Sie müssen nicht passieren eine Funktion, die die Objective-C-Laufzeit bewusst ist passieren. Entweder ist es eine Objective-C-Methode, oder es ist eine Swift-Methode, die als @objc markiert ist.

+0

AuthViewModel-Unterklasse von NSObject und Klasse verwendet ViewModel auch Unterklasse UIViewController. Was kann ich tun? Wenn ich Selector ("viewModel") verwende funktioniert es aber ich habe eine Warnung. Aber ich kann #selector nicht verwenden, weil viewModel "var" ist? – ajjnix