如何在OSLogMessage中使用字符串?XCode类型转换报错咨询
问题原因
第一行代码里的"Device found:"是字符串字面量,Swift会自动通过ExpressibleByStringLiteral协议将其转换为OSLogMessage类型,匹配logger.info(_:)的参数要求。
而第二行的String(describing: device)是一个已初始化的String实例,Swift不会自动将String实例转为OSLogMessage,所以触发类型不匹配的报错。
最优解决方案
不需要额外的冗余包装,直接利用OSLogMessage的插值语法传递对象即可:
logger.info("\(device)")
如果需要和String(describing:)完全一致的调试描述效果,也可以直接写:
logger.info("\(String(describing: device))")
另外,也可以采用OSLog传统的格式化占位符写法,更符合原生日志API的使用习惯:
logger.info("%@", device)
这里的%@是Swift/Objective-C日志通用的对象占位符,OSLog会自动处理对象的描述输出。
内容的提问来源于stack exchange,提问作者Stephan
相关产品推荐
相关产品推荐

