PFQuery.getObjectWithId(objectId: String) --- 'AnyObject?' 不可转换为 'String' 错误 --- 解析 sdk 1.7.1 和 Xcode 6.3

PFQuery.getObjectWithId(objectId: String) --- 'AnyObject?' is not convertible to 'String' error --- Parse sdk 1.7.1 and Xcode 6.3

我刚刚将 Xcode 更新为 6.3,并将我的解析 sdk 更新为 1.7.1。我从 apple 文档中得知,我将花一些时间在我的 iOS 应用程序上修复我的一些 swift 代码。 Xcode 对我的所有修复感到满意,除了一个函数通过 id 获得解析 class。我已经挖掘了 parse、apple、Whosebug 和 google 来进行修复,但我已经为这个最后的修复苦苦思索了几个小时,迫切需要你们中一位超级聪明人的帮助。如果这是一个愚蠢的问题,我提前道歉。我已经编程很长时间了,但我是 iOS.

的菜鸟

下面是我正在尝试做的一个简单示例,它在我更新 Xcode 和解析 sdk 之前有效。现在 Xcode 为我尝试从 PFObject 中获取变量的每一行都提供了错误。每行的错误如下:“'AnyObject?' 不可转换为 'String'”和 "Cannot assign to immutable value of type 'String"。任何见解将不胜感激。

func getFakeObject(objectId: String) -> FakeObject {

    var fakeObject: FakeObject = FakeObject()
    var query = PFQuery(className:"FakeObject")
    var loadedFakeObject = query.getObjectWithId(objectId)
    if loadedFakeObject != nil {

            fakeObject.objectId = objectId
            fakeObject.isActive = loadedFakeObject["isActive"] as! Bool
            fakeObject.desc = loadedFakeObject["desc"] as! String
            fakeObject.purchasePrice = loadedFakeObject["purchasePrice"] as! Double
            fakeObject.purchaseDate = loadedFakeObject["purchaseDate"] as! NSDate
            fakeObject.labels = loadedFakeObject["labels"] as [String]

    }
    return fakeObject
}

Swift 1.2 对语法更加严格,并试图防止您在不知不觉中做出危险的事情。

你写的地方:

var loadedFakeObject = query.getObjectWithId(objectId)
if loadedFakeObject != nil {

试试看:

if let loadedFakeObject = query.getObjectWithId(objectId) {

在第一种情况下,您得到一个可选对象(可能没有这样的对象),然后检查它的 nil,但仍然使用可选对象。因为它是可选的,所以你需要写loadedFakeObject!["isActive"] as! Bool。但实际上没有必要,因为您可以使用 if let 来同时检查 展开可选的,这意味着在 if 语句中,它不会是可选的更多

您可能还想考虑在各个地方切换到 as? 而不是 as!,但这可能不是问题的原因,更多的是运行时安全问题。