簡體   English   中英

允許用戶使用 Swift 選項輸入 nil 值

[英]Allowing user to input nil values with Swift optionals

我有一個用戶文本輸入和一個用戶圖像輸入。 我不確定用戶是否會為其中任何一個輸入值,因此我想確保這些內容是可選的。 允許零文本輸入已經很容易了。 我已經讓我的條款是可選的

@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!)

如果用戶沒有輸入任何內容,我需要在可選術語中使用它。

您的 imageView 是可選的。 UIImageJPEGRepresentation不接受可選的圖像輸入。 所以你正在使用 ! 強制解包可選並將非可選參數傳遞給UIImageJPEGRepresentation

然而,這不是最好的方法,因為如果您的self.UploadHiddenImage!.imagenil ,您的應用程序將崩潰。

您必須使用if let myImage = self.UploadHiddenImage!.image as? UIImage { } if let myImage = self.UploadHiddenImage!.image as? UIImage { }甚至在 swift 2.0 中更好guard let myImage = self.UploadHiddenImage!.image as? UIImage else { } guard let myImage = self.UploadHiddenImage!.image as? UIImage else { }所以此代碼僅在您的uploadHiddenImage.image運行。

根據您的 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)
}

・如果您使用故事板,請將 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?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM