为什么Apple选择继续使用Selector
类型,Swift完全有能力发送该功能。
所以不要这样做:
UILongPressGestureRecognizer(target: self, action: "showSomething:")
可以这样做:
UILongPressGestureRecognizer(showSomething)
如果您有代表,这也有效:
UILongPressGestureRecognizer(delegate.showSomething)
Apple是否有理由选择将String的悲伤实现保留为指向函数,而不是最大限度地使用Swift的功能?
编辑:showSomething
func showSomething(sender: UIGestureRecognizer) {
println("showSomething triggered")
}
答案 0 :(得分:2)
这是传统兼容性的问题。
您用作示例的API是用Objective-C编写的,但仍然是。完全有可能Apple可以利用Swift的功能来生成更多简化的API,但它需要在Swift中本地重写它们,这对于组成Cocoa和Cocoa的大量现有框架而言。 Cocoa Touch需要花费大量的时间和精力。
Apple可能会向Objective-C添加功能,通过利用更新的Swift功能来提高语言之间的兼容性,同时避免重写框架的需要。例如,在Xcode 6.3 beta中,他们向Objective-C添加了“可空性”的概念(参见发行说明),当在Swift代码中使用时,它会影响Objective-C API的可选性。 Swift可以改进现有API的另一个例子是使用默认参数......也许这也可以用Objective-C API以某种方式描述?
我不会对Apple未来发布的非Objective-C(原生Swift)框架感到惊讶,但我们还有一段路要走。