博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么 NSLog 不支持 Swift 对象
阅读量:7082 次
发布时间:2019-06-28

本文共 1252 字,大约阅读时间需要 4 分钟。

作者:Erica Sadun,,原文日期:2016/05/02

译者:;校对:Channe;定稿:

Erica,你好,在我想在 Playground 运行以下代码时,编译未通过。错误原因:“error: ‘NSLog’ is unavailable: Variadic function is unavailable NSLog(“%@”, Foo()) Foundation.NSLog:2:13: note: ‘NSLog’ has been explicitly marked unavailable here(错误:'NSLog' 不可用:可变参数函数不支持 NSLog(“%@”, Foo())。'NSLog' 在此已被标记为不可用)”。这是为什么呢?

import Foundationclass Foo {}NSLog("%@", Foo())

首先,Foo 不是 NSObject,如果 FooNSObject 的子类,那么控制台会直接输出 “<__lldb_expr_24.Foo: 0x7fc9d2920210>”,不过,你的问题不是这个原因。

回到之前讨论的问题上来,我发现你遵循了 CustomDebugStringConvertible 协议,并用 NSLog 输出转义的字符串。

class Foo: CustomDebugStringConvertible {    var debugDescription: String {return "Superfoo!"}}NSLog("\(Foo())")

其实,Swift 中的 NSLog 并不支持转义输出,如果你一定要这样做的话,应该像这样写:

class Bar: NSObject {    override var description: String {return "Superbar!"}}NSLog("%@", Bar())

上面这个例子中,我选择了直接重写 NSObjectdescription 属性的 getter 方法,而不是遵循 CustomDebugStringConvertible 协议。实现 description 的getter 方法(OS X 10.10 以上),可以直接返回一个能描述内容的字符串。这样 NSLog 就能将对象转为文本方式进行显示了,即可以使用字符串格式化输出。

2016-05-02 14:12:43.106 Untitled Page 3[5161:524832] Superfoo!2016-05-02 14:12:43.107 Untitled Page 3[5161:524832] Superbar!

如果是 Swift 原生类,NSLog 同样支持调试变量 debugDescription (OS X 10.8 以上),这是调试输出最为推荐的方式。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 。

转载地址:http://bnmml.baihongyu.com/

你可能感兴趣的文章
maven实战
查看>>
HAproxy配置文件详解以及HAproxy的ACL详解
查看>>
Object-C NSData
查看>>
mysql升级
查看>>
我的友情链接
查看>>
安卓学习-Bitmaps与优化
查看>>
用JAVA和Websocket实现实时通讯
查看>>
如何/怎么激活win8/win8.1/windows8.1/
查看>>
windows做FTPserver的一种方法
查看>>
Windows2012、windows2016配置多用户登录
查看>>
VMware vSAN超融合虚拟化架构与NetApp FAS2620存储服务器虚拟化架构对比
查看>>
周期性任务计划
查看>>
Java多进程管道通信
查看>>
ipfs官方周刊,18期
查看>>
无线压力变送器的安装与标定方式!
查看>>
sever 2016部署web服务
查看>>
varnish使用yum安装及不同域名站点
查看>>
五分钟教会你分布式系统调用链监控
查看>>
VLAN与Trunk配置
查看>>
我的友情链接
查看>>