gpt4 book ai didi

swift - "Result of ' && do/try/catch block 中的 ' unused"警告

转载 作者:行者123 更新时间:2023-11-28 10:30:59 24 4
gpt4 key购买 nike

我一直在试图弄清楚发生了什么但无济于事。我已经尽可能多地提炼了代码,但如果我在项目中这样做,我仍然会收到“运算符 && 的结果未使用警告(即使它已被使用)但复制到 Playground 的相同代码工作正常,没有警告.这只是一些伪代码,在我试图找到问题的同时重写了一遍基本代码。

enter image description here

enum WordError: Error {
case tooShort
case tooLong
}


func isTooShort(_ word: String) throws -> Bool {
if word.count < 3 { throw WordError.tooShort }
return true }

func isTooLong(_ word: String) throws -> Bool {
if word.count > 5 { throw WordError.tooLong }
return true }


func check(_ word: String) {

do {
try isTooShort(word) && isTooLong(word)
print(word)
} catch let error as WordError {
print("\(error)")
} catch {
}
}

这只是一个错误还是我在这里做错了什么?

我想如果我使用:我可以消除警告:

 try _ = isTooShort(word) && isTooLong(word)

但我不确定这是否是“修补”它的正确方法。

最佳答案

这样做没有错。 “正确”的方法是,当像 isTooShort 这样的东西属于您并且您想在不捕获结果的情况下调用它时,是用 @discardableResult 标记它。如果你这样做了,那么你就可以写

do {
try isTooShort(word)
try isTooLong(word)
print(word) // if we get here, it's neither too short nor too long
} catch ...

但在这些情况下,您所做的也是“正确的”。

真正 的问题是为什么您既要返回 Bool 又要 抛出错误。您对 isTooShort 的实现非常奇怪。您似乎在滥用 throw。目前尚不清楚您通过以这种奇怪的方式实现它试图解决什么问题。 isTooShort 只能以一种方式失败:单词太短。那么为什么它不只返回一个 bool 值呢? isTooShort 会问一个简单的是/否问题,所以只需回答它:返回 Bool 并停止。

如果您的目标是回答一个三向问题 - 即告诉调用者这个词是太短、太长还是恰到好处,那么再次返回一个自定义枚举回答了这个问题:

enum WordLength {
case tooShort
case tooLong
case justRight
}

func howIs(_ word: String) -> WordLength {
if word.count < 3 { return .tooShort }
if word.count > 5 { return .tooLong }
return .justRight
}

关于swift - "Result of ' && do/try/catch block 中的 ' unused"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56042016/

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