可选的NSArray - Anyobject没有下标成员

时间:2016-10-31 17:27:08

标签: swift nsarray nsdictionary optional snapshot

我正在尝试打印出我从在线数据库返回的Optional NSArray中的第一个对象。什么都没打印出来。不知道如何将可选的NSArray打包成一个我可以索引的数组。现在只尝试打印出NSArray中的第一个值。

fireBaseRef.observeSingleEventOfType(.Value, withBlock: { snapshot in

                if !snapshot.exists() { return }

                for item in snapshot.children {
                print("This is the child value of reference", item.value["reference"])

                    if let referenceObjects = item.value["reference"] {
                        print("This is the first value", referenceObjects[0]) //error is Anyobject? has no subscript members
                    }

                }

            })

我收到以下

This is the child value of track-titles Optional(<__NSArrayM0x618000049000>(
The Chainsmokers - Don't Let Me Down (Illenium Remix),
Flume - Say It ft. Tove Lo (Illenium Remix),
The Chainsmokers Ft. Halsey - Closer (GhostDragon Remix),
Major Lazer & Showtek - Believer,
Fire,
ONE DANCE -- DRAKE (feat. Wizkid & Kyla),
Let Me Love You - Justin Bieber (Trap Edit)
)
)

2 个答案:

答案 0 :(得分:1)

根据您的代码,referenceObjects是NSDictionary,而不是NSArray。因此,当您请求referenceObjects [0]时,运行时将尝试并检索键0的值。

如果您想要检索NSArray,那么类似下面的内容应该有效:

if let referenceObjects = item.value["reference"] as? NSArray where !referenceObjects.isEmpty {
    print("This is the first object: \(referenceObjects.first!)")
}

希望有所帮助。

答案 1 :(得分:-1)

快照作为可选的NSArray返回,因此如果此对象为零,则必须使用条件形式的向下转换。

if let referenceObjects = item.value["reference"] as? NSArray {
 print(referenceObjects[0])
}