声明 IBOutlet 时使用类型别名

Using a typealias when declaring an IBOutlet

出于教学目的,我希望能够在学生的第一个任务中隐藏可选选项的复杂性(我将在接下来的课程中解释)。但是,我也希望他们使用界面并连接函数和变量。

我想做的是:

typealias TextField = UITextField!

那么我正在尝试做:

@IBOutlet var newShipCaptainName: TextField

这只是部分工作。我可以在情节提要中看到它,如果我拖动一个 UITextField 并将其 class 更改为 Textfield,我可以毫无问题地连接它。

但是,编译失败并出现错误:

Class ViewController has no initializers

我明白了。编译器认为 TextField 是一个非可选变量,它不能是 IBOutlet。但是,TextFieldUITextfield!,所以我不确定我做错了什么。

有什么想法吗?

显然,隐式解包可选的类型别名被视为 non-optional 因此您必须显式添加感叹号:

@IBOutlet var newShipCaptainName: TextField!