允许用户使用Swift选项输入nil值

时间:2015-11-30 06:20:39

标签: ios swift

我有用户文本输入和用户图像输入。我不确定用户是否会为这些中的任何一个输入值,因此我想确保这些内容是可选的。允许无文本输入已经足够了。我已将条款设为可选的

@IBOutlet weak var AskText: UITextView?

然而,我正处于一个非常困难的时期,可以选择这样的术语:

let imageData = UIImageJPEGRepresentation(((self.UploadHiddenImage!.image))!, 0.5)

我非常被迫说“!”在最后。它不接受,例如:

let imageData = UIImageJPEGRepresentation(((self.UploadHiddenImage?.image))?, 0.5)

现在,在阅读之后,我的印象是“可选绑定”和“if let”语句将成为我的出路。在这种情况下,我很难理解它们,因为它们与我的相对复杂的陈述有关。

如果有人有几分钟的时间,我非常感谢他们向我展示如何使这种陈述成为可选的。

修改

以下是上下文的更多细节

let imageData = UIImageJPEGRepresentation(((self.UploadHiddenImage!.image))!, 0.5)
    let parseImageFile = PFFile(name:"ask_image.jpeg", data: imageData!)

如果用户没有输入任何内容,我需要用可选的术语。

3 个答案:

答案 0 :(得分:2)

您的imageView是可选的。 UIImageJPEGRepresentation不接受可选的图像输入。所以你正在使用!强制解包可选项并将非可选参数传递给UIImageJPEGRepresentation

然而,这不是最佳方法,因为如果您的self.UploadHiddenImage!.imagenil,您的应用就会崩溃。

你必须使用 if let myImage = self.UploadHiddenImage!.image as? UIImage { } 在swift 2.0中甚至更好 guard let myImage = self.UploadHiddenImage!.image as? UIImage else { }所以只有当您的uploadHiddenImage.image为非零时才会运行此代码。

答案 1 :(得分:0)

根据您的Swift版本以及您希望代码的外观,您有几个选项。

如果您使用Swift 2,最优雅的选择是使用保护声明。

guard let image = self.UploadHiddenImage?.image else {
    return // or handle nil some other way
}

let imageData = UIImageJPEGRepresentation(image, 0.5)
let parseImageFile = PFFile(name:"ask_image.jpeg", data: imageData)

您还可以使用if let语句:

if let image = self.UploadHiddenImage?.image {
    let imageData = UIImageJPEGRepresentation(image, 0.5)
    let parseImageFile = PFFile(name:"ask_image.jpeg", data: imageData)
}

答案 2 :(得分:0)

·如果您使用故事板,请将imageView视为

@IBOutlet weak var UploadHiddenImage: UIImageView!

·然后展开imageView的图像

var parseImageFile: PFFile?
if let image = UploadHiddenImage.image, 
    imageData = UIImageJPEGRepresentation(image, 0.5) {
    parseImageFile = PFFile(name:"ask_image.jpeg", data: imageData)
}

//use the parseImageFile with if let 
if let parseImageFile = parseImageFile {
} 

//or
parseImageFile?