You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift:使用OSLog打印枚举遇‘appendInterpolation无精确匹配’错误如何解决?

如何在OSLog中打印自定义枚举?

问题说明

使用OSLog框架的Logger打印自定义枚举实例时,出现编译错误:No exact matches in call to instance method 'appendInterpolation',但打印Date类型变量可正常执行。测试代码如下:

import OSLog

enum MyEnum {
    case testing
}

extension Logger {
    static let testLog = Logger(subsystem: "my sub", category: "testCat")
}

func testLog() {
    let me = MyEnum.testing
    let someDate = Date()
    
//    Logger.testLog.info("testing log 1 \(me)") // << 报错:No exact matches in call to instance method 'appendInterpolation'
    Logger.testLog.info("testing log 1 \(someDate)") // << 正常运行
}

解决方案

方案1:让枚举遵守CustomStringConvertible协议

OSLog的字符串插值支持所有实现了CustomStringConvertible协议的类型,只需为枚举添加协议实现:

enum MyEnum: CustomStringConvertible {
    case testing
    
    var description: String {
        switch self {
        case .testing:
            return "testing"
        }
    }
}

修改后即可直接用\(me)在日志中打印枚举实例。

方案2:扩展Logger的appendInterpolation方法

若不想让枚举遵守协议,可直接扩展Logger的插值方法,专门适配你的自定义枚举:

extension Logger {
    func appendInterpolation(_ value: MyEnum) {
        switch value {
        case .testing:
            appendInterpolation("testing")
        }
    }
}

完成扩展后,原报错的日志代码就能正常编译运行。

原因说明

Date能正常打印是因为系统已为其实现了OSLog所需的插值逻辑,而自定义枚举默认无此支持,因此需要手动添加上述任一方式来实现日志打印。

内容的提问来源于stack exchange,提问作者zumzum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:35:09