不能使用类型为'String'的索引下标'[NSObject:Any]'类型的值

时间:2018-03-01 13:00:59

标签: ios swift

我在互联网上找到了不同的东西,但没有任何帮助我。我是新手,我会帮助你。 我会收到消息:

  

不能使用'String'类型的索引下标'[NSObject:Any]'类型的值

private func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : Any]){
    let chosenImage = info[UIImagePickerControllerEditedImage] as UIImage
    let neuesBild = BildUndNotiz(bild: chosenImage, text: "")

    bildUndNotiz += [neuesBild]
    self.Spoonlist.reloadData()

    picker.dismissViewControllerAnimated(true, completion:
        {self.zeigeViewControllerFürBildUndNotiz(neuesBild)})

}

非常感谢

4 个答案:

答案 0 :(得分:7)

SWIFT 4解决方案:

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

guard let image = info[UIImagePickerController.InfoKey.originalImage]  
as? UIImage else {
  return
}

imagePicked.image = image
//dismiss(animated:true, completion: nil)
}

答案 1 :(得分:3)

此代码已过期。 correct method signature现在是:

func imagePickerController(_ picker: UIImagePickerController,
                           didFinishPickingMediaWithInfo info: [String : Any])

由于您的方法签名错误,info的类型错误,无法通过字符串进行下标。

答案 2 :(得分:1)

解释错误:

info[NSObject : Any]个对象。所以它是一个字典,键是NSObject对象。

你做info[UIImagePickerControllerEditedImage],但UIImagePickerControllerEditedImage是一个字符串,而不是NSObject,所以你不能这样做下标。

这就是说错误。

但这不是全部,我想你使用的Swift版本是Swift 4,你的UIImagePickerControllerDelegate方法不应该被调用,因为它没有好的签名。 来自doc:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : Any])

将其替换为文档中的那个。

答案 3 :(得分:0)

func imagePickerController(_ picker: UIImagePickerController, 
      didFinishPickingMediaWithInfo info: [String : Any])

此方法将info作为类型[String: Any]的swift字典,其中字典键是值类型。 但是您将字典作为[NSObject: Any]传递,其中键是对象或引用类型。所以基本上你传递错误的参数,你也不能改变UIImagePickerControllerDelegate的委托方法签名。