gpt4 book ai didi

swift2 - 用于条件绑定(bind)的 swift 2 初始化程序必须具有可选类型,而不是 'UIImage'

转载 作者:行者123 更新时间:2023-12-04 12:19:35 27 4
gpt4 key购买 nike

在更新我的 xcode 以运行 swift 2 后,它给了我这两个我难以解决的错误。

Error 1 Cannot subscript a value of type '[String : AnyObject]?' with an index of type 'String'



代码
let image : UIImage = editingInfo[UIImagePickerControllerOriginalImage] as! UIImage

Error 2 Initializer for conditional binding must have Optional type, not 'UIImage'



代码
if let constImage = image  (Error2 display here) 
{
let targetWidth = UIScreen.mainScreen().scale * UIScreen.mainScreen().bounds.size.width
let resizedImage = constImage.resize(targetWidth)

picker.dismissViewControllerAnimated(true, completion: {
() -> Void in

NetworkManager.sharedInstance.postImage(resizedImage, completionHandler: {
(error) -> () in

if let constError = error
{
self.showAlert(constError.localizedDescription)
}
})

})
}

最佳答案

以下代码...

let image : UIImage = editingInfo[UIImagePickerControllerOriginalImage] as! UIImage

...如果没有 UIImagePickerControllerOriginalImage 就会崩溃键或者如果它不是图像。

你从哪里得到 editingInfo ?因为 imagePickerController:didFinishPickingImage:editingInfo:在 Swift 中不可用。您应该使用 optional func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) .

您在下一行的第二个错误...
if let constImage = image

... 是由 let image: UIImage = ... 引起的线。您的 image属于 UIImage输入,而不是 UIImage? .因此它不是可选的,您不能在 if let constImage = image 中使用它。 .必须是 UIImage?如果你想以这种方式使用它。顺便说一句,不需要使用 let image: UIImage = ... , let image = ...就足够了,因为编译器可以从您的语句中推断出变量类型。

把它改写成这样。
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else {
// throw an error, return from your function, whatever
return
}
// from now you can use `image` safely
// it does exist and it's not optional

let targetWidth = UIScreen.mainScreen().scale * UIScreen.mainScreen().bounds.size.width
let resizedImage = image.resize(targetWidth)

picker.dismissViewControllerAnimated(true, completion: {
() -> Void in

NetworkManager.sharedInstance.postImage(resizedImage, completionHandler: {
(error) -> () in

if let constError = error
{
self.showAlert(constError.localizedDescription)
}
})

})

}

以下部分...
  guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else {
// throw an error, return from your function, whatever
return
}

... 做这个 ...
  • info 中有值吗? UIImagePickerControllerOriginalImage 的字典 key ?如果没有,else {}执行语句,
  • 值在那里,我可以将其转换为 UIImage ?如果没有,else {}执行语句,
  • 现在我们的值来自 info成功转换为 UIImage并存储在 image , else {}语句没有执行,我们的函数继续。

  • 当字典值类型为 AnyObject 时,如何从某种类型的字典中获取值的安全方法例如。

    关于swift2 - 用于条件绑定(bind)的 swift 2 初始化程序必须具有可选类型,而不是 'UIImage',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31645956/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com