【发布时间】:2017-06-16 14:43:03
【问题描述】:
我的目标是使用typealias 作为“附加”到函数声明的一个单词提醒。说,
typealias VoidToVoid = () -> ()
我可以在声明预期的闭包类型时使用类型别名,因此
let f : VoidToVoid = { return }
assert(f is VoidToVoid)
但是,这似乎不是最常用的函数声明方式。我希望有一种方法可以告诉读者,像下面声明的 f′ 函数应该是 VoidToVoid 类型,并使用该名称。
(但是没有读者不得不推断、思考或等待编译器告诉他或她关于类型。更糟糕的是,编译器无法知道类型别名我想要 f′ 并且可能会输出说明裸类型而不是别名的消息。)
func f′() : VoidToVoid { // tentative syntax
return
}
我能到那里吗?
编辑:类型别名有两端使用。一方面,这现在是可能的:
func giveMeAClosure(_ f: VoidToVoid) {
f()
}
另一方面,VoidToVoid 是隐含的:
func canBeGivenAsClosure() {
// ...
}
即在canBeGivenAsClosure被声明的地方,通过VoidToVoid两端之间确实存在联系,但并不明显。这与let 的情况不同,后者可以将“VoidToVoid”作为其类型注释。
【问题讨论】: