Swift能代替Objective-C吗?

2020-01-08 22:41:19王冬梅

它没有任何的保护机制(private, protected),所有的 method和 variable 都是全局可见的,这显然不能满足正经工程项目的需要。 

只能和 ObjC 互动。如果你想正经地使用C或者C++,你得写 ObjC 的 wrapper。这基本限制了你使用大量的 C/C++ 库函数。 
没有办法 catch Objective-C 的 exception,如果一旦出了 exception,你的 App 立马就崩了。这也基本限制了你使用很多 ObjC 旧代码库。 

Chris 在设计这门语言时,可以明显地看到他的短视。这也很正常,他是一个做编译器的,不是做语言研究的。所以这门声称支持函数式编程的语言,根本没有大多函数式语言都普遍存在的功能:

仅有的支持在lazy,闭包,及简单的函数语言函数(如map, filter)。这ObjC中都能做 
没有pattern matching 
类型推导差不多和 C++11 差不多,没有使用hindley milner 
从上面这些特点看, Apple对其的定位仅是给对ObjC头疼的开发者降低学习曲线所推出的玩具语言。前面五条中的每一条,基本都是致命的,因此 Apple 自己的项目也不会使用。做个早期 proof of concept的 prototype 到是可以的。

我可以想象,实现上 Swift 是很简单的(LLVM很成熟了,写个新语言越来越简单,比如只要几步就能做个小语言: 1. Kaleidoscope: Tutorial Introduction and the Lexer),当然有可能 Apple 将来会解决这些问题使得其真正实用。但现在来看,Apple 并不希望 Swift 来替代 Objective C。



注:相关教程知识阅读请移步到swift教程频道。