PFQuery.getObjectWithId(objectId: String) --- 'AnyObject?' не конвертируется в ошибку 'String' --- Parse sdk 1.7.1 и Xcode 6.3
Я только что обновил Xcode до 6.3, а мой синтаксический анализ sdk до 1.7.1. Из документов Apple я знал, что собираюсь потратить некоторое время на исправление части своего быстрого кода в моем приложении для iOS. Xcode доволен всеми моими исправлениями, кроме одного, который получает класс разбора по id. Я исправил анализ, apple, stackru и google для исправления, но я часами бился об это последнее исправление и отчаянно нуждаюсь в помощи одного из вас, супер умных парней. Я заранее прошу прощения, если это окажется глупым вопросом. Я давно программирую, но я новичок в 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 ответ
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!
в разных местах, но это, вероятно, не причина вашей проблемы, а скорее безопасность во время выполнения.