我刚刚将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
}
答案 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!
,但这可能不是导致问题的原因,更多是运行时安全问题。