为什么Selector存在于swift中

时间:2015-03-16 16:22:04

标签: ios swift selector

为什么Apple选择继续使用Selector类型,Swift完全有能力发送该功能。

所以不要这样做:

UILongPressGestureRecognizer(target: self, action: "showSomething:")

可以这样做:

UILongPressGestureRecognizer(showSomething)

如果您有代表,这也有效:

UILongPressGestureRecognizer(delegate.showSomething)

Apple是否有理由选择将String的悲伤实现保留为指向函数,而不是最大限度地使用Swift的功能?

编辑:showSomething

的示例实现
func showSomething(sender: UIGestureRecognizer) {
    println("showSomething triggered")
}

1 个答案:

答案 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)框架感到惊讶,但我们还有一段路要走。

相关问题