gpt4 book ai didi

ios - 更新到 Xcode 10 使值用 "Optional()"包装

转载 作者:行者123 更新时间:2023-11-28 10:36:03 24 4
gpt4 key购买 nike

最近我从 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": Optional("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

最佳答案

在 if-let 语句中使用可选展开

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
if let fetchResults = try context.fetch(request) as? [NSManagedObject]{
let loginData = fetchResults[0]
let profile = loginData.value(forKey: "profile") as! NSManagedObject
self.profile = Profile()
if let branchId = profile.value(forKey: "branchId") as? String{
self.profile.branchId = branchId
}
}

if let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String, let build = Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as? String{
let branchId = loginData.profile.branchId ?? ""
let branchId = loginData.uid ?? ""
let parameters = ["branch_id": branchId,
"version": "\(version).\(build)",
"os_name" : "ios",
"user_id" : login_tty.uid]
print(parameters)
}

Never use force unwrapping, i mean ! directly, it may result in crash, instead safely unwrap using if let and guard let

关于ios - 更新到 Xcode 10 使值用 "Optional()"包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53606860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com