我写了一个函数,用于解析parse中的数据
func updateParse(className: String, whereKey: String, equalTo: String, updateData: Dictionary<String, Any>) {
let query = PFQuery(className: className)
query.findObjectsInBackgroundWithBlock {
(objects, error) -> Void in
if error == nil {
if let objects = objects as? [PFObject] {
for object in objects {
query.getObjectInBackgroundWithId(object.objectId!){
(prefObj, error) -> Void in
if error != nil {
print(error)
} else if let prefObj = prefObj {
for (key, value) in updateData {
prefObj[key] = value // Cannot assign a value of type 'Any' to a value of type 'AnyObject?'
}
prefObj.saveInBackground()
}
}
}
}
} else {
print("Error: \(error!)")
}
}
}
我用
来称呼它let imageData = UIImagePNGRepresentation(self.uploadPreviewImage.image!)
let parseImageFile = PFFile(name: "userProfileImage.png", data: imageData!)
updateParse("ProfileImages", whereKey: "uploader", equalTo: "Phil", updateData: ["imageFile":parseImageFile])
我已在相应的行中注释了错误。 重要的是要注意类型并不总是图片。有时是一个字符串。
答案 0 :(得分:4)
如果您知道类型始终为AnyObject
类型,则可以使用强制转换:
prefObj[key] = value as! AnyObject
否则使用带有as?
的可选强制转换或将函数签名更改为:
func updateParse(className: String, whereKey: String, equalTo: String, updateData: Dictionary<String, AnyObject>)
答案 1 :(得分:0)
首先,你要覆盖变量'prefObj'
switch(x) {
case 'The pyramids of Giza':
console.log(x);
break;
case 'The Leaning Tower of Pisa':
console.log(x);
break;
default:
console.log('Not found');
}
试试这个:
if error != nil {
print(error)
} else if let prefObj = prefObj { //does not make sence
...
}
它未经测试,但这是如何做的方式
var表示您可以更改存储变量的引用
告诉编译器变量引用不会改变
如果你的错误真的与它有关,我不是很害羞,因为你试图改变“let”变量中的变量
此外,您在邮件签名中的参数不合适,请尝试将其更改为:
if error != nil {
print(error)
} else if var prefObj_NotNullUnwrapped = prefObj { // you can use let instead of var
...
}
另请参阅此stackoverflow question,它解释了Any(所有类型包括Int,Double等)和AnyObject(仅“真正的”类对象)之间的区别
AnyObject上的问号?告诉编译器变量可能没有引用,也称为nil