【问题标题】:Why does String.contains behave differently when I import Foundation?为什么 String.contains 在我导入 Foundation 时表现不同?
【发布时间】:2022-11-27 03:19:57
【问题描述】:

刚开始学习 Swift,我真的对以下行为感到困惑。

这是我在没有 Foundation 的情况下运行 String.contains 时得到的结果:

"".contains("") // true
"a".contains("") // true
"a".contains("a") // true
"" == "" // true

这就是我从 Foundation 得到的:

import Foundation

"".contains("") // false
"a".contains("") // false
"a".contains("a") // true
"" == "" // true

为什么结果会因我是否导入 Foundation 而不同?还有其他这样的差异吗?某处是否有详尽的清单?在基金会文档中没有找到任何内容,但这似乎很重要。我只知道this 其他例子。

还:如何这会发生吗?这正常吗?我知道 Swift 有类似扩展的东西,一旦包含它们就会改变每个实例的行为,但肯定应该只添加行为,而不是改变现有行为。如果现有行为发生变化,语言不应该以某种方式表明这一点,比如如果我想要不同的行为就让我使用不同的类型吗?

【问题讨论】:

    标签: swift string foundation


    【解决方案1】:

    基本上这和我回答here的问题是一样的。 Foundation 不是 Swift 的一部分,它是 Cocoa 的一部分,Cocoa 是比 Swift 早很多很多年的旧 Objective-C 库。 Swift 的字符串版本是 NSString。但是 Swift String 是“桥接”到 NSString 的,所以一旦你导入 Foundation,一堆 NSString 方法就会像 Swift String 的一部分一样活跃起来,即使它们不是。

    【讨论】:

    • 打字错误? “Swift 的字符串版本是字符串”。
    猜你喜欢
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多