Swift中应该使用哪种类型?NSString还是String?

41 浏览
0 Comments

Swift中应该使用哪种类型?NSString还是String?

随着Swift的发布,我一直在努力理解这种新语言

我是一名iOS开发人员,会在应用程序中使用NSString,NSInteger,NSDictionary等类型。我注意到在苹果公司的《Swift编程语言》电子书中,他们使用Swift类型String,Int,Dictionary

我注意到Swift类型没有(或者不同命名)一些Foundation类型的函数。例如,NSString具有length属性。但是我找不到类似于Swift String的属性。

我在想,在iOS应用程序中,我是否仍然应该使用Foundation类型?

admin 更改状态以发布 2023年5月23日
0
0 Comments

NSString:创建存在于堆中并始终通过引用传递的对象。

String:它是一个值类型,无论何时我们传递它,它都是按值传递的,
就像结构体和枚举一样,在Swift中,String本身就是一个结构体。

public struct String {
 // string implementation 
}

但是,当你第一次对它进行突变时,才会创建复制品。

字符串自动桥接到Objective-C作为NSString。如果Swift标准库没有,
您需要导入Foundation框架来访问NSString定义的方法。

Swift String非常强大,它具有丰富的内置函数。

关于字符串的初始化:

var emptyString = ""             // Empty (Mutable)
let anotherString = String()     // empty String immutable    
let a = String(false)           // from boolean: "false"
let d = String(5.999)           //  "    Double "5.99"
let e = String(555)             //  "     Int "555"
// New in Swift 4.2 
let hexString = String(278, radix: 18, uppercase: true) // "F8"

从重复值创建字符串:

 let repeatingString = String(repeating:"123", count:2) // "123123"

在Swift 4中 - 字符串是字符的集合:

现在,String能够执行任何人能够在集合类型上执行的所有操作。

有关更多信息,请参阅Apple文档。

0
0 Comments

尽可能地使用Swift原生类型。语言已经针对它们做了优化,并且大部分功能在本地类型和Foundation类型之间进行了桥接。

虽然StringNSString在大多数情况下可以互换,即你可以将String变量传递给接受NSString参数的方法,反之亦然,但是某些方法似乎目前还没有自动桥接的能力。参见此答案,了解如何获取String的长度,以及此答案,讨论如何使用containsString()来检查子字符串。 (免责声明:我是上述两个答案的作者)

我还没有完全探索其他数据类型,但我认为在Swift和NSNumber中,类似上述内容的版本也会保持真实性。

每当您需要使用Foundation类型之一时,您可以将它们用于显式类型的变量/常量,如var str: NSString = "An NSString",或者在一个Swift类型的现有变量/常量上使用bridgeToObjectiveC() ,例如使用str.bridgeToObjectiveC().length。您还可以使用str as NSStringString强制转换为NSString

然而,这类显式地使用Foundation类型的技术,或者至少其中一些,在未来可能会变得过时,因为 从语言参考中所述的情况来看,String / NSString桥应该是完全无缝的。

有关该主题的全面讨论,请参阅使用Swift与Cocoa和Objective-C:处理Cocoa数据类型

0