Ich habe gerade angefangen, Swift 3 zu lernen, und ich konvertiere diesen Code in Ziel-c zu Swift 3 und ich bin bei typealias
stecken. Ich habe danach gesucht, und vielleicht gibt es schon richtige Hilfe, aber das hat mein Problem nicht gelöst.
Das ist die Linie in Objective-C:So rufen Sie die Typalias in Swift
typedef void (^TagBlock)(NSString *tagText, NSInteger idx);
Und es ist eine Eigenschaft, für sie als @property (nullable, copy) TagBlock tapBlock;
in Objective-c.
Jetzt habe ich die obige Zeile wie umgewandelt:
typealias TagBlock = (_ tagText: NSString,_ idx: NSInteger) -> Void
Welche etwas verstehe ich Syntax weist sehr gut ist und das Eigentum ist var tapBlock: TagBlock!
bei schnell.
Nun, wie ich versuche, es zu nennen in einer der @IBAction
Methoden wie:
if (tapBlock != nil) {
self.setTapBlock(tapBlock: (tagButton.titleLabel?.text,tag) -> Void)
}
Dies gibt einen Fehler wie:
Expected type before '->'
Diese Linie in Ziel ist:
if (_tapBlock) {
_tapBlock(sender.titleLabel.text, self.tag);
}
UPDATE Nach import UIKit
habe ich 01 hinzugefügtund danach var tapBlock: TagBlock!
In class TagView: UIView
ich es den Fehler geben Sie mir bei tapBlock?(sender.titleLabel.text, self.tag)
So in ein @IBAction
als
@IBAction func tagTapped(_ sender: Any) {
if (tapBlock != nil) {
tapBlock?(sender.titleLabel.text, self.tag)
}
}
Aufruf in:
Cannot call value of non-function type 'TagBlock'`
es gibt einen Fehler 'Kann Wert des Nichtfunktionstyps 'TagBlock' nicht aufrufen –
Eine andere Konvention, ich erwähne es für die Fertigstellung, ist' Void' zu verwenden, wo die Parameter Void und '()' sind, wenn Rückgabetyp ist ungültig. so eine Alternative ist 'typalias TagBlock = ((String, Int) ->())?' – Abizern
@ChaudhryTalha Bearbeiten Sie Ihre Frage und fügen Sie den Code, der den Fehler verursacht. – vadian