我有一个项目,我正在尝试使用 Swift 来创建新模块。对于其中一个新类,我使用 Swift 3.2 中 Objective-C 类的现有方法。
以下是该方法的签名,
- (BOOL)canLoginWithUsername:(NSString *)username password:(NSString *)password error:(NSError **)error
我正在尝试快速使用这种方法,
if try loginLogicHandler.canLogin(withUsername: usernameValue, password: passwordValue) as Bool {
}
但是,我收到编译器错误
无法强制将 () 类型的值转换为“Bool”类型
我应该怎么做才能使其发挥作用?
谁能建议如何解决这个问题?
返回的 Objective-C 方法BOOL
并返回一个NSError
通过引用暴露给 Swift 作为使用以下方法的方法try
/catch
错误处理机制,并返回Void
。如果您查看生成的界面,您可能会发现它看起来像这样:
func canLogin(withUsername: String, password: String) throws // notice no return type
如果 Objective-C 方法失败,则返回NO
,并填充错误指针,然后 Swift 抛出该错误。所以,你需要使用try
and catch
:
do {
try loginLogicHandler.canLogin(with: bla, and: bla)
// if canLogin returned YES, you get here
} catch {
// if canLogin returned NO, you get here
}
或者,您可以使用try?
。这个有点奇怪;你会得到一个可选的Void
,所以你会得到Void
如果该方法成功,或者nil
如果失败:
if (try? loginLogicHandler.canLogin(with: bla, and: bla)) != nil {
// the method returned YES
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)