从Objective-C转Swift遇Bool类型转换错误,求解决方法
修复Swift中“无法将某类型转换为预期的参数类型 'Bool'”的问题
这个问题出在Swift和Objective-C对布尔判断的不同处理逻辑上,我来帮你梳理清楚并修复代码:
问题原因
在Objective-C里,对象指针只要不是nil,就会被隐式转换成布尔值YES;但Swift是强类型语言,不允许直接把对象实例当作Bool类型使用,必须显式地进行非空判断。另外你的brand.logoImageName如果是可选类型(对应OC中可能为nil的字符串),同样不能直接放在if条件里。
修复后的代码
假设GymBrand.brandForName(name:)方法返回的是可选类型GymBrand?(这是OC方法转Swift后的常见情况),你可以用可选绑定来同时完成非空判断和变量赋值,然后再检查logoImageName是否有值:
if let brand = GymBrand.brandForName(name: self.gym.brand), brand.logoImageName != nil { // 原来if块中的逻辑代码 } else { // else块中的逻辑代码 }
如果logoImageName是一个非可选的字符串,但你需要判断它是否非空,那可以改成:
if let brand = GymBrand.brandForName(name: self.gym.brand), !brand.logoImageName.isEmpty { // 执行逻辑 } else { // 执行逻辑 }
补充说明
如果brandForName方法在Swift中被桥接成了返回非可选的GymBrand,但实际存在“无效实例”的情况,那你可能需要给GymBrand添加一个类似isValid的属性来判断实例是否有效,再结合logoImageName的判断来写条件。不过最常见的场景还是第一种可选绑定的写法。
内容的提问来源于stack exchange,提问作者Siva
相关产品推荐
相关产品推荐

