調べたのですが、なじみのある答えが見つからなかったので...
更新、追加、フェッチ、削除などの解析メソッドを処理するクラスをプログラムしようとしています。
func updateParse(className:String, whereKey:String, equalTo:String, updateData:Dictionary<String, String>) {
let query = PFQuery(className: className)
query.whereKey(whereKey, equalTo: equalTo)
query.findObjectsInBackgroundWithBlock {(objects, error) -> Void in
if error == nil {
//this will always have one single object
for user in objects! {
//user.count would be always 1
for (key, value) in updateData {
user[key] = value //Cannot assign to immutable expression of type 'AnyObject?!'
}
user.saveInBackground()
}
} else {
print("Fehler beim Update der Klasse \(className) where \(whereKey) = \(equalTo)")
}
}
}
Swiftを今学習しようとしているので、少し宣言をして回答を得たいので、もう少し学習します。
btw:後でこのメソッドを次のように呼び出します。
parseAdd.updateParse("UserProfile", whereKey: "username", equalTo: "Phil", updateData: ["vorname":self.vornameTextField!.text!,"nachname":self.nachnameTextField!.text!,"telefonnummer":self.telefonnummerTextField!.text!])
エラーメッセージには、不変オブジェクトを変更しようとしていますが、これは不可能です。
メソッドパラメータまたはクロージャの戻り値として宣言されたオブジェクトは、デフォルトでは不変です。
オブジェクトを変更可能にするには、メソッド宣言にキーワードvar
を追加するか、行を追加して変更可能なオブジェクトを作成します。
また、繰り返しループのインデックス変数はデフォルトで不変です。
この場合、変更可能なコピーを作成するための行が挿入され、インデックス変数は変更可能として宣言されます。
列挙中にオブジェクトを変更するように注意してください。これにより、予期しない動作が発生する可能性があります
...
query.findObjectsInBackgroundWithBlock {(objects, error) -> Void in
if error == nil {
//this will always have one single object
var mutableObjects = objects
for var user in mutableObjects! {
//user.count would be always 1
for (key, value) in updateData {
user[key] = value
...
Swiftでは、多くのタイプがデフォルトで不変であるstruct
sとして定義されています。
私はこれを行うと同じエラーがありました:
protocol MyProtocol {
var anInt: Int {get set}
}
class A {
}
class B: A, MyProtocol {
var anInt: Int = 0
}
そして別のクラスでは:
class X {
var myA: A
...
(self.myA as! MyProtocol).anInt = 1 //compile error here
//because MyProtocol can be a struct
//so it is inferred immutable
//since the protocol declaration is
protocol MyProtocol {...
//and not
protocol MyProtocol: class {...
...
}
だから必ず持っている
protocol MyProtocol: class {
そのような鋳造をするとき