gpt4 book ai didi

Swift:似乎不允许比较字符串?用一个字符串?

转载 作者:搜寻专家 更新时间:2023-11-01 05:48:43 24 4
gpt4 key购买 nike

我要求用户输入(这有效)并尝试根据输入是 nil、空字符串还是使用 开关的非空字符串输出不同的结果 子句(不起作用)。

第一次尝试时出错,因为我正在尝试比较可选字符串和非可选字符串:

import Foundation

print("Hi, please enter a text:")

let userInput = readLine(stripNewline: true)

switch userInput {
case nil, "": // Error: (!) Expression pattern of type ‘String’ cannot match values of type ‘String?’
print("You didn’t enter anything.")
default:
print("You entered: \(userInput)")
}

很公平,所以我创建了一个可选的空字符串来比较:

import Foundation

print("Hi, please enter a text:")

let userInput = readLine(stripNewline: true)
let emptyString: String? = "" // The new optional String

switch userInput {
case nil, emptyString: // Error: (!) Expression pattern of type ‘String?’ cannot match values of type ‘String?’
print("You didn’t enter anything.")
default:
print("You entered: \(userInput)")
}

所以这给了我一个错误,说我不能将“字符串?”与“字符串?”进行比较。

这是为什么呢?它们不知何故仍然不是同一类型吗?

附言。我觉得我在这里遗漏了一些基本的东西,比如 Troy指出可选类型不是“与相应的非可选类型相同的类型,但有可能没有值”(不是确切的引述,请参阅问题末尾的更新:What does an exclamation mark mean in the Swift language?)。但我一直在连接最后的点,为什么这不行。

最佳答案

替换

case `nil`, "":

case nil, .Some(""):

请注意,optional 是一个具有两个可能值的枚举:.None.Some(value)

对于第二个 String? 示例,请注意 case 中的匹配是使用未定义的 ~= 运算符执行的选项。

如果你定义:

@warn_unused_result
public func ~=<T: Equatable>(lhs: T?, rhs: T?) -> Bool {
return lhs == rhs
}

您的两个示例都将开始工作(不推荐)。

关于Swift:似乎不允许比较字符串?用一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38269323/

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