【问题标题】:Swift2 treats BOOL function (objc code) with NSError parameter as Void functionSwift2 将带有 NSError 参数的 BOOL 函数(objc 代码)视为 Void 函数
【发布时间】:2015-09-19 03:14:30
【问题描述】:

当我将我的 Swift 1 项目转换为 Swift 2 时发生了奇怪的事情,即 Swift2 将带有 NSError 的返回类型 BOOL 函数视为返回类型 Void 函数。

例如,我的代码使用XMPPFramework,其中有一个函数定义如下:

- (BOOL)authenticateWithPassword:(NSString *)password error:(NSError **)errPtr;

我曾经有一段代码可以做到这一点:

if (xmppStream!.authenticateWithPassword(password)) {
    println("authenticated");
}

现在它已更新为遵循 Swift 2 语法:

do {
    if let result = try xmppStream!.authenticateWithPassword(password) {
        print("authenticate");
    }
} catch _ {}

由于某些原因,swift 2 将 authenticateWithPassword 视为 void 类型函数,因此上面的代码无法通过编译。

只是想知道是否有人遇到过同样的情况以及解决方案是什么。

谢谢。

【问题讨论】:

    标签: objective-c swift swift2


    【解决方案1】:

    这是我的解决方案:

    do {
        try xmppStream!.authenticateWithPassword(password)
        print("authenticate");
    } catch let error as NSError {
        print("Error: \(error.localizedDescription)")
    }
    

    【讨论】:

    • 感谢您的回复。这肯定通过了编译,我这样做是为了让我的应用程序可以再次运行,只是想知道类型是如何变化的。此外,我还有其他函数遭受同样的情况,一些返回值对我的逻辑是必不可少的。
    • 我认为 swift2.0 想要强迫我们在可能引发错误的代码周围使用do-catch。如果有任何错误,do statement 将停止执行,因此不需要返回值。此外,您可以将您的逻辑分成三个单独的块:docatchdefer
    • 谢谢@Bannings,我会继续把它应用到我的所有代码中。
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2013-12-29
    • 2014-01-15
    相关资源
    最近更新 更多