Xcode 13.4.1用户定义运行时属性字符串"0"被存为空的问题
Xcode13.4.1 自定义Runtime属性字符串"0"被解析为空的问题
问题现象
升级至Xcode13.4.1后,自定义视图中定义了如下@IBInspectable属性:
@IBInspectable open var numberString = "2" { didSet { label.text = numberString } }
当在Xib的User Defined Runtime Attributes中给该属性设置字符串类型的"0"时,numberString会被解析为空字符串,但查看Xib的XML源码,配置本身是正确的:
<userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="string" keyPath="numberString" value="0"/> </userDefinedRuntimeAttributes>
特殊触发修复的场景:如果添加其他无关属性,或者重复定义该属性两次,问题会自动消失:
<userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="string" keyPath="numberString" value="0"/> <userDefinedRuntimeAttribute type="string" keyPath="numberString" value="0"/> </userDefinedRuntimeAttributes>
该问题仅在Xcode13.4.1的Xib项目中出现,旧版Xcode及新创建的Storyboard项目无此异常。
临时解决方案
- 重复配置属性:在Xib的User Defined Runtime Attributes中重复添加两次相同的
numberString属性并设置为"0",Runtime会正确解析为"0"。 - 添加冗余占位属性:在配置列表中新增一个无关的字符串类型属性(比如命名为
dummyAttr),无需在代码中实现该属性,仅作为占位即可让原numberString的"0"正常解析。 - 代码兜底兼容:在属性的
didSet方法中添加空值判断,确保异常场景下显示正确值:
@IBInspectable open var numberString = "2" { didSet { label.text = numberString.isEmpty ? "0" : numberString } }
原因分析
这是Xcode13.4.1针对Xib文件中**单独的字符串类型Runtime属性值"0"**存在的解析Bug,推测是解析逻辑误将单独的"0"判定为空值或进行了错误的类型转换,而当配置列表中存在多个属性时,会触发正确的解析流程。
内容的提问来源于stack exchange,提问作者jab11
相关产品推荐
相关产品推荐

