ios - Swift:发布版本中 assertionFailure 的奇怪行为

标签 ios swift

在我看来,assertionFailure 将在发布版本中被忽略。但是当我在 Release模式下运行下面的代码时,assertionFailure 可以运行和停止程序。为什么?

代码

enum MessageType: RawRepresentable {
    case news
    case unknownMessageType(value: String)

    init?(rawValue: String) {
        assertionFailure("Tihs assertionFailure will never stop execution")
        switch rawValue {
        case "A":
            self = .news
        case "B":
            self = .news
        case "C":
            self = .news
        case "D":
            self = .news
        case "E":
            self = .news
        case "F":
            self = .news
        case "G":
            self = .news
        case "H":
            self = .news
        case "I":
            self = .news
        case "J":
            self = .news
        case "K":
            self = .news
        case "L":
            self = .news
        case "M":
            self = .news
        case "N":
            self = .news
        case "O":
            self = .news
        case "P":
            self = .news
        case "Q":
            self = .news
        case "R":
            self = .news
        case "S":
            self = .news
        case "T":
            self = .news
        case "U":
            self = .news
        default:
            assertionFailure("This assertionFailure will cause a fatal error and stop execution")
            self = .unknownMessageType(value: rawValue)
        }
    }

    var rawValue: String {
        switch self {
        case .news:
            return "A"
        case .unknownMessageType(value: let value):
            return value
        }
    }
}

这个语句会导致崩溃 let message = MessageType(rawValue: "aaaa"),由第二个 assertionFailure 而不是第一个引起。

另一个奇怪的事情是如果我在函数 init?(rawValue: String),assertionFailure会被忽略,不会有任何crash。 PS,我不会禁用发布版本的优化。

2018-11-29编辑

我在 Apple Developer Forum 上发布了一个话题,这似乎是一个编译器错误。

最佳答案

我在 Apple Developer Forum 上发布了一个话题,这似乎是一个编译器错误。

关于ios - Swift:发布版本中 assertionFailure 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53408214/

相关文章:

ios - 在 Swift 4 中点击外部时,键盘和警报 View 不会消失?

ios - 尝试制作一个带有解析的笔记应用程序

ios - 需要一个 IOS 的绘图/素描算法

ios - 可扩展的 UITableView 动态

iphone - 如何在 Swift 中使用 CoreData 获取 n 天前的项目?

c++ - 在 iOS 上使用 OpenCV 文件存储

ios - WatchKit 中的模态 Segue 不调用 contextForSegueWithIdentifier

swift - 外设 didDiscoverCharacteristicsfor 服务中不允许使用 UUID

swift - 如何在 spritekit 中创建垂直滚动菜单?

iOS:显示带有多个图像的长文章的最佳方式