gpt4 book ai didi

switch-statement - 错误: value of type 'String' has no member 'hasSuffix' in Swift switch

转载 作者:行者123 更新时间:2023-11-30 12:40:43 24 4
gpt4 key购买 nike

我正在关注 Swift.org 的教程

下面的 switch 语句示例引发错误。

let vegetable = "red pepper"
switch vegetable {
case "celery":
print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)?")
default:
print("Everything tastes good in soup.")
}

收到的错误是 : error: value of type 'String' has no member 'hasSuffix'
case let x where x.hasSuffix("pepper"):
我正在使用 ubuntu 14.04我的 Swift 版本是 swift --version
Swift version 3.0 (swift-3.0-PREVIEW-2)

最佳答案

StringhasSuffix(_:) 成员是从 NSString 桥接的(因此是从 Foundation 桥接的)。当在 Xcode Playgrounds 和项目中使用 Swift 时,此方法可从 Swift 标准库中获取,而当从例如在 IBM 沙箱/本地 Linux 机器上,Swift std-lib 版本无法访问,而 core-libs Foundation 的版本则可以。

要访问后一个实现,您需要显式导入 Foundation:

import Foundation // <---

let vegetable = "red pepper"
switch vegetable {
case "celery":
print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)?")
default:
print("Everything tastes good in soup.")
}

大多数 Swift 教程都会假设通过 Xcode 执行,并且 import Foundation 可以是解决任何“...没有成员...”错误的良好的第一次尝试。在 Xcode 之外编译 Swift。

<小时/>

详细信息

正如 @Hamish 在下面的评论中指出的那样(谢谢!),标准库中提供了 hasSuffix(_:) 的一种实现,需要 _runtime(_ObjC) ,但是。

来自swift/stdlib/public/core/StringLegacy.swift :

#if _runtime(_ObjC)

// ...

public func hasSuffix(_ suffix: String) -> Bool {
// ...
}

#else
// FIXME: Implement hasPrefix and hasSuffix without objc
// rdar://problem/18878343
#endif

如果上述实现无法访问(例如从 Linux),则可以使用另一种实现。但是,访问此方法需要隐式 import Foundation 语句。

来自swift-corelibs-foundation/Foundation/NSString.swift :

#if !(os(OSX) || os(iOS))
extension String {

// ...

public func hasSuffix(_ suffix: String) -> Bool {
// ... core foundation implementation
}
}
#endif

关于switch-statement - 错误: value of type 'String' has no member 'hasSuffix' in Swift switch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42256363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com