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