如何在其正文中解开守卫声明?
Posted
技术标签:
【中文标题】如何在其正文中解开守卫声明?【英文标题】:How to unwrap guard statement in its body? 【发布时间】:2016-08-31 09:29:36 【问题描述】:我的错误陈述是:
在“保护条件”中声明的变量在其主体中不可用
我的代码是:
extension ViewController
func uploadImage(image: UIImage, progress: (percent: Float) -> Void,
completion: (tags: [String], colors: [PhotoColor]) -> Void)
guard let imageData = UIImageJPEGRepresentation(image, 0.5) else
Alamofire.upload(
.POST,
"http://api.imagga.com/v1/content",
headers: ["Authorization" : "Basic xxx"],
multipartFormData: multipartFormData in
multipartFormData.appendBodyPart(data: imageData, name: "imagefile",
fileName: "image.jpg", mimeType: "image/jpeg")
以上是程序的一部分。
错误发生在包含“data: imageData”的行中
提前致谢!
【问题讨论】:
我认为您将guard let ... else
与 if let
混淆了。
我第二个@EricAya
那我应该做些什么修改呢?
ohh..你必须从 else 部分返回控制并在 else 块后执行操作。
将else..
块中的代码移到外面,替换为错误处理和return
【参考方案1】:
考虑这个 guard 示例:
guard let variable = optionalVariable else return
// Variable is safe to use here
还有这个 if 例子:
if let variable = optionalVariable
// Variable is safe to use here
在您的情况下,您将这两个概念混为一谈。您将 guard 用作 if 语句。您可以将警戒更改为 if,或将代码移到 else 块之外。
guard 语句可能有点混乱!考虑将其用作循环内的 continue 语句。
【讨论】:
嗯,这个想法是守卫声明不应该让你感到困惑...... OP应该想知道守卫后面的“其他”有什么好处......以上是关于如何在其正文中解开守卫声明?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 android 复选框是不是在其 onClick 方法中被选中(在 XML 中声明)?
如何修复“函数声明了一个不透明的返回类型,但在其主体中没有返回语句来推断基础类型”错误?