我很好奇 Swift 是否像 PHP 一样是动态的还是静态的,我的意思是在应用程序运行时是否可以生成类?
我很好奇 Swift 是否像 PHP 一样是动态的还是静态的,我的意思是在应用程序运行时是否可以生成类?
它是静态的-非常静态。编译器必须在编译时拥有关于所有类和函数的所有信息。您可以使用“扩展”现有类(使用extension
),但即使如此,您仍必须在编译时完全定义该扩展内容。
Objective-C是动态的,并且由于在现实生活中,您可能会在Cocoa存在的情况下使用Swift,因此可以使用Objective-C运行时在向Objective-C公开的Swift类中注入/交换方法。即使您使用Swift语言,也可以这样做。但是Swift本身是静态的,事实上,它是明确设计的,以最小化或消除使用类似Objective-C的动态性。
Swift本身是静态类型的。当与Cocoa一起使用时,您可以访问objective-c运行时库,从而使您能够使用动态类、消息等。这并不意味着语言本身是动态类型的。您可以使用C或任何支持与C桥接的语言来做同样的事情,使用libobjc.A.dylib
。