gpt4 book ai didi

swift - 误用 guard 语句代替 nil 检查

转载 作者:行者123 更新时间:2023-11-28 12:48:01 28 4
gpt4 key购买 nike

我正在做一些非常简单的事情,只是为了习惯 Swift(来自 objc)——我想通过使用 guard 返回链表中的所需节点。声明和 switch陈述。我显然滥用了 guard声明因为我的else子句很大(这是保留我的 switch 语句的地方)。也许我什至不需要 switch声明,但它只是稍微清理了一下。

我的旧代码如下:

func getValue (atIndex index: Int) -> T {
if count < index || index < 0 {
print ("index is outside of possible range")
}
var root = self.head
// if var root = self.head {
if index == 0 {
return (self.head?.value)!
}
if index == count-1 {
return (self.tail?.value)!
}
else {
for _ in 0...index-1 {
root = root!.next!
}
}
return root!.value
}

替换为 guard声明(但得到一个编译器错误,守卫主体可能不会失败) - 我的问题是返回什么,因为我的函数返回类型是 <T> (任何类型)。

func getValue (atIndex index: Int) -> T {
guard (count < index || index < 0) else {
switch true {
case index == 0:
if let head = self.head {
return head.value
}
case index == count-1:
if let tail = self.tail {
return tail.value
}
default:
if var currentNode = head {
for _ in 0...index-1 {
currentNode = currentNode.next!
}
return currentNode.value
}
}
}
}

我想添加 print在我的 guard 之外声明声明说所需的索引超出范围,但我还需要在 T 类型的函数末尾返回一些内容.问题是在我的guard 之外和 switch 语句,我没有什么可返回的。

最佳答案

guard 语句用于捕获无效情况,因此您需要如下内容:

func getValueAtIndex(index: Int) -> T {
guard index >= 0 && index < count else {
// Invalid case
print("Index is outside of possible range")

// Guard must return control or call a noreturn function.
// A better choice than the call to fatalError might be
// to change the function to allow for throwing an exception or returning nil.
fatalError("Index out of bounds")
}

// Valid cases
}

关于swift - 误用 guard 语句代替 nil 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37447231/

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