2014-10-13 7 views
8
@IBAction func getNewPhotoAction(sender: AnyObject) { 
    println("getNewPhotoAction") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.getNewPhotoAction(sender: AnyObject) // Error 
} 

Ich möchte nur die getNewPhotoAction IBAction Methode in viewDidLoad nennen.Swift - nennen @IBAction Methode in viewDidLoad ohne Parameter

Welcher Parameter in diese Zeile eingeben ->self.getNewPhotoAction(?????)?

Ich habe keinen Parameter. Ich muss nur anrufen.

verwenden ich in Objective-C-Stil:

[self getNewPhotoAction:nil] 

aber ich weiß nicht, Swift-Stil.

+0

Pass selbst als ANYOBJECT d.h self.getNewPhotoAction (Selbst-) –

+0

@ himanshu-Padia Fügen Sie keine Blockzitaten für Dinge, die nicht Code sind. Und wenn du redigierst, vergiss nicht, Substantive korrekt zu aktivieren und Fehler zu beheben. Nur die Bearbeitung, um den Namen der Sprache in blockquotes hinzuzufügen, ist nicht akzeptabel. Vielen Dank. – Moritz

Antwort

0

Da Sie keinen Absender haben, übergeben Sie nil.

self.getNewPhotoAction(nil) 
+0

'getNewPhotoAction's Signatur muss in' AnyObject? 'Geändert werden, wenn Sie nil übergeben wollen. –

+1

self.getNewPhotoAction (nil) -> Ich habe es schon versucht, aber es ist ein Fehler – user1272854

3

Man konnte immer eine separate func erstellen, die Sie in Ihrem viewDidLoad anrufen oder in Ihrem IBAction

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.getNewPhoto() 
} 

func getNewPhoto(){ 
    //do whatever you want here. 
    println("getnewphotoaction") 
    println("whatever you want") 
} 
@IBAction func getNewPhotoAction(sender: AnyObject) { 
    self.getNewPhoto() 
} 
+0

yep .. es ist eine gute Lösung. aber ich möchte Methode direkt anrufen ..trotzdem danke deine Antwort – user1272854

+0

Dies fügt dem Code eine kleine, aber unnötige Menge an Masse hinzu. – Airuop

+1

@Amerino Lösung ist besser. Es führt eine intermediäre, verständliche Abstraktion ein. Aber wenn Sie es wirklich direkt anrufen wollen, überprüfen Sie meine Antwort. –

28

Der Parameter sender gibt an, wer die Aktion-Methode aufrufen. Wenn Sie von viewDidLoad anrufen, übergeben Sie einfach self zu ihm.

override func viewDidLoad() { 
    super.viewDidLoad() 
    getNewPhotoAction(self) 
} 

By the way, wenn die sender Parameter des getNewPhotoAction Verfahrens nicht verwendet wurde, kann der Parametername weggelassen werden.

@IBAction func getNewPhotoAction(AnyObject) { 
    println("getNewPhotoAction") 
} 
2

Sie brauchen eigentlich nicht any object überhaupt passieren. Wenn Sie keine Notwendigkeit, die sender zu verwenden, erklären Sie dann die function ohne es so:

@IBAction func getNewPhotoAction() { ... } 

Und es wie folgt verwenden:

self.getNewPhotoAction() 

Unter Umständen müssen Sie die Steckdose in interface builder wieder verbinden Wenn Sie diese Änderung vornehmen (entfernen Sie sie und fügen Sie sie dann wieder hinzu), wenn diese Methode mit einem Ereignis in interface builder verbunden ist.

+1

99% der iKationen haben keine Verwendung für den Absender. Dies funktioniert um das schnelle Mangling-Problem herum, das in xcode 8 schief gelaufen ist und den Code kompakter macht. Danke! –

0

Wenn Sie weiterhin die UIButton verweisen müssen oder was auch immer die Aktion sendet und will, dass es in der gleichen Zeit von Code nennen - man kann dies auch tun:

onNext(UIButton())

verschwenderisch, aber weniger Code .

1
@IBAction func getNewPhotoAction(sender: AnyObject? = nil) { 
    print("getNewPhotoAction") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.getNewPhotoAction(nil) 
} 
2
@IBAction func getNewPhotoAction(sender: AnyObject?){ 
    ...... 
} 

**AnyObject** means that you have to pass kind of Object which you are using, nil is not a AnyObject. 
But **AnyObject?**, that is to say AnyObject is Optional, nil is a valid value. 
meaning the absence of a object. 

self .getNewPhotoAction(nil) 
+0

Es funktioniert wirklich. –

Verwandte Themen