斯威夫特和基金会的关系

时间:2016-07-24 15:34:43

标签: ios swift2 foundation

作为iOS开发的新手,我想了解Swift 2和Foundation Framework之间的关系

我已经知道Swift只是一种编程语言,而Foundation是基于Objective-C的框架构建。

我不明白的是,当我需要使用基础课程或只是留在纯粹的Swift时。

例如。当我有一个Swift字符串时,我总是需要从NSString继承我无法在纯Swift字符串中找到的功能吗?

昨天我正在寻找两个Swift字符串之间不区分大小写的比较。我发现的解决方案之一是:

var a : String = "Cash"
var b  : String = "cash"

if(a.caseInsensitiveCompare(b) == NSComparisonResult.OrderedSame){
    println("voila")
}

这给我带来了很多挫折感。 Swift字符串如何具有在纯Swift中不存在的函数(caseInsensitiveCompare)?

字符串是否从某处继承了它以及如何继续?

如果我需要基金会作为Swift的超集,请给我一个全面的解释。作为一名跳过Objective-C for Swift的开发人员,我不再需要基础的哪一部分?

2 个答案:

答案 0 :(得分:1)

基础框架源于NeXTSTEP,从目标C的早期开始。这是一个很好的框架,但不可否认它已经过时了,缺乏很多现代编程原则,并没有利用Swift的许多新的闪亮玩具。 Apple正致力于振兴Swift 3基金会。

只要有纯粹的Swift解决方案,我就可以避免使用Foundation。

在您的情况下,您可以通过将两个字符串转换为小写并比较它们来进行不区分大小写的比较:

if a.lowercaseString == b.lowercaseString {
    //Strings match
}

我实际上会将其转换为String

的扩展名
extension String {
    func equalsIgnoringCase() -> Bool {
        return a.lowercaseString == b.lowercaseString
    }
}

//then:

if a.equalsIgnoringCase(b) {
    //Strings match
}

答案 1 :(得分:1)

  

Swift字符串怎么样?   一个在纯Swift中不存在的函数(caseInsensitiveCompare)?

这是因为您导入了Foundation(或UIKit,其中包括Foundation),因为Swift String是桥接到Foundation NSString。这会导致许多(但不是全部)NSString方法为String而生效。

如果你有导入的基金会,你能够做你做的事情:caseInsensitiveCompare不会出现。