0

我刚刚将 Xcode 更新为 6.3,并将我的 parse sdk 更新为 1.7.1。我从苹果文档中知道我将花一些时间在我的 iOS 应用程序上修复一些我的 swift 代码。Xcode 对我的所有修复都很满意,除了一个通过 id 获取解析类的函数。我已经疏通了 parse、apple、stackoverflow 和 google 的修复程序,但我一直在努力解决最后一个修复程序几个小时,并且迫切需要你们中的一个超级聪明人的帮助。如果这是一个愚蠢的问题,我提前道歉。我已经编程了很长时间,但我是 iOS 的菜鸟。

下面是我正在尝试做的一个简单示例,它在我更新 Xcode 和解析 sdk 之前工作。现在,Xcode 为我试图从 PFObject 中获取变量的每一行提供了错误。每一行的错误是这样的:“'AnyObject?' 不能转换为“字符串””和“不能分配给“字符串”类型的不可变值。任何见解将不胜感激。

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
}
4

1 回答 1

1

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!在各个地方,但这可能不是问题的原因,更多的是运行时安全问题。

于 2015-04-11T00:51:20.453 回答