在 swift 中追加一个数组,遇到问题

Appending an array in swift, having problems

我收到错误 'AnyObject' 没有名为 'append' 的成员,因为我正在尝试 post 到数组。我不确定如何修复错误,因为我认为我的代码是正确的。有人可以帮我做适当的调整吗?我的代码如下:

import CloudKit
import UIKit
import Foundation

class Items {
    var theSelfie: [String]

    init(record: CKRecord) {
        println("init")
        var record: CKRecord
        var iama: String
        var youarea: String
        var image: CKAsset? // tried also initializing the CKAsset separately
        var postPic: UIImage?

        let database = CKContainer.defaultContainer().publicCloudDatabase
        let container = CKContainer.defaultContainer()
        let publicDB = container.publicCloudDatabase
        let data = CKRecord(recordType: "theUsers")

        var predicate = NSPredicate(value: true)
        let myQuery = CKQuery(recordType: "theUsers", predicate: predicate)

        var mySelfie = theSelfie

        publicDB.performQuery(myQuery, inZoneWithID: nil) { results, error in
            if error != nil {
                println(error)
            } else {
                for record in results{
                    let aselfie = data.objectForKey("selfie")
                        aselfie.append[mySelfie]()
                        return ()
                    }        
                }
            }
        }
    }
}

您正在从字典中获取 aselfieAnyObject 类型的字典 returns 个对象。既然你看起来很自信,那就是 Array 你可以将它转换为 ArrayNSArray.

let aselfie = data.objectForKey("selfie") as Array

objectForKey 的 return 类型是 AnyObject!

类型 AnyObject 没有名为 append 的方法。您需要将 return 值转换为正确的类型。

此外,我认为我从未见过您使用键 "selfie" 在 data 中输入条目。如果你想让它成为一个数组,那么你需要在某个地方调用 data.setObject

您应该将自拍转换为数组,然后调用它的 append 方法而不是它的下标

if let aselfie = data.objectForKey("selfie") as? [AnyObject] // if aselfie is supposed to hold object of single type case it as [ObjcetsToHold]
                    aselfie.append(mySelfie)
                    return ()
                } 

我不认为 aselfie.append[mySelfie]() 是有效的 Swift 语法。它甚至可以编译吗?也许你的意思是 aselfie.append(mySelfie)?

还有,你怎么知道aselfie是一个Array?你应该施放它:

let aselfie = data.objectForKey("selfie") as? Array<Whatever>
    aselfie.append[mySelfie]()
    return ()
}