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

Moi*_*eño 30 swift

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

mat*_*att 51

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

Objective-C中是动态的,因为,在现实生活中,你可能会在可可的情况下使用雨燕,你可以使用Objective-C运行时注入在暴露于Objective-C的一个斯威夫特类/调酒方法.即使您使用Swift语言说话,也可以这样做.但Swift 本身是静态的,实际上是明确设计的,以便最小化或消除Objective-C型动态的使用.

  • 我不了解php,但我确实了解Ruby,总的来说,我会说Swift与Ruby完全相反。Ruby具有“鸭子打字”功能;Swift具有严格的编译时类型。Ruby在运行时定义其类(类定义本身是可执行语句);Swift在编译时定义其类。Ruby可以打开一个类并注入动态形成的方法。斯威夫特不能。 (2认同)

Val*_*adu 5

Swift 本身是静态类型的。当与 Cocoa 一起使用时,您可以访问 Objective-c 运行时库,它使您能够使用动态类、消息等。这并不意味着语言本身是动态类型的。您可以对 C 或任何其他支持 C 桥接的语言使用libobjc.A.dylib.