Swift是动态语言还是静态语言?

时间:2015-04-28 16:07:36

标签: swift

我只是好奇,如果Swift像php或static一样动态,我的意思是我可以在应用程序运行时生成类吗?

4 个答案:

答案 0 :(得分:45)

它是静态的 - 非常静态。编译器必须在编译时获得有关所有类和函数的所有信息。您可以“扩展”现有的类(使用extension),但即使这样,您也必须在编译时完全定义该扩展包含的内容。

Objective-C是动态的,因为在现实生活中,你可能会在Cocoa存在的情况下使用Swift,你可以使用Objective-C运行时在暴露于Objective的Swift类中注入/ swizzle方法-C。即使您使用Swift语言说话,也可以这样做。但是Swift 本身是静态的,实际上是为了最小化或消除Objective-C型动态的使用而明确设计的。

答案 1 :(得分:3)

Swift本身,是静态类型的。与Cocoa一起使用时,您可以访问objective-c运行时库,该库使您能够使用动态类,消息和所有内容。这并不意味着语言本身是动态类型的。您可以使用libobjc.A.dylib来使用C或支持与C桥接的任何其他语言执行相同的操作。

答案 2 :(得分:1)

一般来说,你永远不会说静态语言。你可以说静态类型语言或动态类型语言,你也可以说强类型语言。

因此java是一种静态类型语言以及强类型语言,因为编译器无法自动检测类型,因此它是静态的,并且类型受到严格限制,因此它也是一种强类型语言。

javascript既是动态类型语言,也是非强类型语言。因为编译器能够在运行时检测类型,并且类型也不受严格限制。

基于上面的例子,你可以说swift允许我们不要声明类型并留给编译器自己检测类型,因此swift被苹果官方宣布为动态类型语言。它也是一种强类型语言,你应该严格使用类型,即使你没有声明类型,如果编译器检测到它是一个字符串,那么它不是任何其他类型。

希望它有用。

答案 3 :(得分:0)

仅当您想使用目标c库时。 Swift本质上是静态类型的。它们只是为您提供界面,因此您可以逐渐转向swift。