Swift 和基金会的关系

Swift and Foundation relationship

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

之间的关系

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

我不明白的是什么时候我需要使用 Foundation 类 或只停留在 pure 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 换 Swift 的开发者,我不再需要基础的哪一部分?

Foundation 框架源于 Objective C 早期的 NeXTSTEP。这是一个很棒的框架,但不可否认它已经过时并且缺乏很多现代编程原则,并且没有利用 Swift 的许多新玩具。 Apple 正在为 Swift 3.

振兴 Foundation

只要有纯 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
}

How can a Swift string has a function(caseInsensitiveCompare) that doesn't exist in pure Swift?

这是因为您导入了 Foundation(或包含 Foundation 的 UIKit)并且因为 Swift String bridged 到 Foundation NSString。这导致许多(但不是全部)NSString 方法 spring 对 String 有效。

如果您 not 导入了 Foundation,您将 not 能够做您所做的事情:caseInsensitiveCompare 会不存在。