我有用户文本输入和用户图像输入。我不确定用户是否会为这些中的任何一个输入值,因此我想确保这些内容是可选的。允许无文本输入已经足够了。我已将条款设为可选的
@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!)
如果用户没有输入任何内容,我需要用可选的术语。
答案 0 :(得分:2)
您的imageView是可选的。 UIImageJPEGRepresentation
不接受可选的图像输入。所以你正在使用!强制解包可选项并将非可选参数传递给UIImageJPEGRepresentation
。
然而,这不是最佳方法,因为如果您的self.UploadHiddenImage!.image
为nil
,您的应用就会崩溃。
你必须使用
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?