升级至Xcode 9.3(Swift 4.1)后类属性及字符串前出现'some'前缀问题
Swift 4.1中属性前出现"some"的原因及解决办法
你遇到的这个some前缀,其实是Swift 4.1对Optional类型的调试输出做的小改动,完全不用担心——它只是表示你的属性是一个非nil的Optional类型,本质上数据是完全正常的,只是显示方式变了而已。
为什么会出现"some"?
在Swift 4.1之前,非nil的Optional值打印出来是Optional(值)的格式;从Swift 4.1开始,官方把这个格式改成了some(值),用来更准确地对应Optional类型的本质(Optional是一个枚举,.some是它的非nil关联值 case)。
比如你代码里的deviceID: String!是隐式解包Optional,它本质还是Optional<String>类型,所以打印时就会显示some(你的字符串内容)。
怎么获取真实的属性值?
如果你想看到不带some的真实值,只需要对Optional进行解包即可:
- 安全解包(推荐):用
if let或者guard let处理,避免nil崩溃:
let user = UserBasic(...) // 假设你已经初始化了对象 if let deviceID = user.deviceID { print(deviceID) // 这里会直接输出纯字符串,没有some前缀 }
- 强制解包(仅确定值非nil时使用):
print(user.deviceID!) // 直接输出真实字符串
- 对于JSON字符串的情况:你看到的
some({"email":...}),应该是某个String?类型的变量打印结果,同样解包后就能得到纯净的JSON内容:
if let jsonStr = yourJsonOptionalString { print(jsonStr) // 正常的JSON字符串 }
总结
这个some只是调试时的显示变化,不会影响你的程序逻辑或实际数据。只要正确处理Optional的解包,就能拿到你需要的真实值啦。
内容的提问来源于stack exchange,提问作者GordonW
相关产品推荐
相关产品推荐

