我在互联网上找到了不同的东西,但没有任何帮助我。我是新手,我会帮助你。 我会收到消息:
不能使用'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)})
}
非常感谢
答案 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
的委托方法签名。