Swift 使用带有非可选值赋值的guard
我喜欢使用Swift 使用带有非可选值赋值的guard,swift,Swift,我喜欢使用guard,因为它能让你的意图清晰明了。我把它都用在了像这样的可选版本上 guard let c = MyOptionalArray else { return } 对于非可选项上更传统的边界检查 guard MyArray.count > 0 else { return } 但是现在我想在下面的代码中使用count。所以我做了 guard let c = MyArray.count > 0 else { return } 这显然不起作用,所以我做了应该做的 guar
guard
,因为它能让你的意图清晰明了。我把它都用在了像这样的可选版本上
guard let c = MyOptionalArray else { return }
对于非可选项上更传统的边界检查
guard MyArray.count > 0 else { return }
但是现在我想在下面的代码中使用count
。所以我做了
guard let c = MyArray.count > 0 else { return }
这显然不起作用,所以我做了应该做的
guard let c = parts.count where c > 1 else { return }
但这意味着条件绑定的初始值设定项必须具有可选类型,而不是“Int”。现在我理解了错误,并尝试了一系列看似明显的格式更改,但没有成功。是否无法将guard用作非可选值的赋值?这似乎是它应该能够做到的事情。如果你在里面放一个
案例,它就会起作用。详情如下:
guard case let c = parts.count where c > 1 else { return }
parts
和可选数组吗?是的,但在某种程度上这不是重点。根据您对guard
的看法,它肯定会处理这种情况。但正如@Gavin在下面所指出的,它确实处理了这个问题,但有一点不稳定。如果部分是可选的,这确实非常重要。如果是,则可以编写此guard let c=parts?.count其中c>1,否则{return}
如果parts是可选的,编译器将不会打印此错误:条件绑定的初始值设定项必须具有可选类型,而不是“Int”
。请检查一下你的代码。我无法想象为什么它能工作,但它确实工作得很好。谢谢,这是我自己永远也不会明白的。你可以看看case
的其他用法。如果您转到该页的第7节,您可以看到有关使用保护壳
的更多信息。当保护壳let
有用时,这是一个非常好的示例