guard
我正在做一些非常简单的事情,只是为了习惯 Swift(来自 objc)——我想通过使用语句和语句在链表中返回所需的节点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
,说明所需的索引超出了范围,但我还需要在 type 函数的末尾返回一些东西T
。问题是在我的guard
和 switch 语句之外,我没有什么可以返回的。