Я только что начал изучать swift 3, и я преобразовываю этот код в объектив-c в swift 3, и я застрял в typealias
. Я искал его, и, возможно, появилась правильная помощь, но она не решила мою проблему.
Это строка в Objective-C:Как назвать типалиа в Swift
typedef void (^TagBlock)(NSString *tagText, NSInteger idx);
И есть свойство для него как @property (nullable, copy) TagBlock tapBlock;
в Objective-C.
Теперь я преобразовал выше линии, как:
typealias TagBlock = (_ tagText: NSString,_ idx: NSInteger) -> Void
Что-то я очень хорошо понимаю, синтаксис мудрый и свойство в случае стрижа var tapBlock: TagBlock!
.
Теперь, когда я пытаюсь вызвать его в одном из @IBAction
методов, как:
if (tapBlock != nil) {
self.setTapBlock(tapBlock: (tagButton.titleLabel?.text,tag) -> Void)
}
Это дает ошибку, как:
Expected type before '->'
Эта линия цели является:
if (_tapBlock) {
_tapBlock(sender.titleLabel.text, self.tag);
}
ОБНОВЛЕНИЕ После import UIKit
Я добавил typealias TagBlock = ((String, Int) -> Void)?
и после этого var tapBlock: TagBlock!
В class TagView: UIView
я звоню в в @IBAction
как
@IBAction func tagTapped(_ sender: Any) {
if (tapBlock != nil) {
tapBlock?(sender.titleLabel.text, self.tag)
}
}
Так что в tapBlock?(sender.titleLabel.text, self.tag)
он дает мне ошибку:
Cannot call value of non-function type 'TagBlock'`
это сообщение об ошибке «Невозможно вызывать значение нефункционного типа« TagBlock » –
Другим соглашением, которое я упоминаю для его завершения, является использование« Void », где параметры Void и'() ', когда Тип возврата недействителен. поэтому альтернативой является 'typealias TagBlock = ((String, Int) ->())?' – Abizern
@ChaudhryTalha Измените свой вопрос и добавьте код, который вызывает ошибку. – vadian