随着 Swift 的引入,我一直在尝试了解新语言
我是一名 iOS 开发人员,会在应用程序中使用 NSString、NSInteger、NSDictionary
等类型。我注意到在 Apple 的“The Swift Programming Language”电子书中,他们使用了 Swift 类型 String, Int, Dictionary
我注意到 Swift 类型没有(或名称不同)Foundation 类型所具有的某些功能。例如 NSString
有一个 length
属性。但我一直无法为 Swift String
找到类似的。
我想知道,对于 iOS 应用程序,我是否仍应使用 Foundation 类型?
最佳答案
您应该尽可能使用 Swift 原生类型。该语言已针对使用它们进行了优化,并且大部分功能都在 native 类型和 Foundation
类型之间架起了桥梁。
虽然 String
和 NSString
大部分是可以互换的,也就是说,您可以将 String
变量传递给采用 NSString
的方法> 参数,反之亦然,目前某些方法似乎没有自动桥接。见 this answer讨论如何获取字符串的长度和 this answer有关使用 containsString()
检查子字符串的讨论。 (免责声明:我是这两个答案的作者)
我还没有完全探索过其他数据类型,但我假设上面所说的某些版本也适用于 Array
/NSArray
、Dictionary
/NSDictionary
,以及 Swift 和 NSNumber
当您需要使用其中一种 Foundation 类型时,您可以使用它们来显式键入变量/常量,如 var str: NSString = "An NSString"
或使用 bridgeToObjectiveC ()
在 Swift 类型的现有变量/常量上,例如在 str.bridgeToObjectiveC().length
中。您还可以使用 str as NSString
将 String
转换为 NSString
。
但是,这些技术显式使用 Foundation 类型或至少其中一些类型的必要性在未来可能会过时,因为根据语言引用中的说明,String
/NSString
例如,桥应该是完全无缝的。
有关该主题的详细讨论,请参阅 Using Swift with Cocoa and Objective-C: Working with Cocoa Data Types
https://stackoverflow.com/questions/24038629/