Так что недавно я переключился с Xcode 9 на Xcode 10 для разработки приложений для iOS.Первое, что я заметил, когда я пытался распечатать переменную, значение оборачивается необязательным , тогда как в Xcode 9 никогда не происходило .например, вот код, который я тестирую.
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as! String
let parameters = ["branch_id": loginData.profile.branchId,
"version": "\(version).\(build)",
"os_name" : "ios",
"user_id" : loginData.uid]
print(parameters)
и вывод был таким:
["os_name": "ios", "branch_id": Optional ("2 ")," version ":" 1.5.8.3 "," user_id ": Необязательно (" 1141 ")]
Я пытался принудительно развернуть код с восклицательным знаком
"branch_id": loginData.profile.branchId!
,
или даже лучше с оператором объединения
"branch_id": loginData.profile.branchId ?? "0"
Это работает, но у меня есть более 30 строк кода с той же проблемоймне нужно сделать это один за другим?Или есть способ изменить это поведение?
К вашему сведению, я использую Swift 4 для своего проекта.Редактировать: к вашему сведению, это было протестировано на iOS 12, в то время как раньше в Xcode 9 тестировалось на iOS 11
Редактировать:
Чтобы ответить matt комментарий, запрашивающий информацию о том, где loginData.profile.branchId
взяли, вот оно.
Итак, данные извлекаются из модель данных , и я использую этот код для извлечения:
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
let fetchResults = try context.fetch(request) as? [NSManagedObject]
let loginData = fetchResults![0]
let profile = loginData.value(forKey: "profile") as! NSManagedObject
self.profile = Profile()
self.profile.branchId = profile.value(forKey: "branchId") as? String