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

时间:2015-04-11 00:31:39

标签: xcode swift parse-platform pfquery pfobject

我刚刚将Xcode更新为6.3并将我的解析sdk更新为1.7.1。我从苹果文档中得知,我将花一些时间在我的iOS应用程序上修复一些快速代码。除了一个通过id获取解析类的func之外,Xcode对我的所有修复都很满意。我已经疏通了解析,苹果,堆栈溢出和谷歌的修复,但我一直在敲打这个最后修复几个小时,并迫切需要一些超级智能家伙的帮助。如果事实证明这是一个愚蠢的问题,我会提前道歉。我已经编程了很长时间,但我是iOS的菜鸟。

下面是我正在尝试做的一个简单示例,在我更新Xcode和解析sdk之前,它已经工作了。现在Xcode给出了我试图从PFObject中获取变量的每一行的错误。每一行的错误都是这样的:“'AnyObject?'不能转换为'String'“和”不能分配给'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
}

1 个答案:

答案 0 :(得分: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语句中,它将不再是可选项。< / p>

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