Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用带有非可选值赋值的guard_Swift - Fatal编程技术网

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
有用时,这是一个非常好的示例