ios – 将打印重定向到文件,如将NSLog重定向到文件

ios – 将打印重定向到文件,如将NSLog重定向到文件,第1张

概述我已使用宏将NSLog重定向文件. 但我无法迅速找到一种稳定的方式来做到这一点. 截至目前,我正在做一个解决方法 我定义了以下方法,所以无论何时我在文件中调用print它都来到这里并将其写入文件. func print(log:String!) { if let logg = log { DeveloperConsoleManager.sharedInst 我已使用宏将NSLog重定向到文件.

但我无法迅速找到一种稳定的方式来做到这一点.

截至目前,我正在做一个解决方法

我定义了以下方法,所以无论何时我在文件中调用print它都来到这里并将其写入文件.

func print(log:String!) {        if let logg = log {            DeveloperConsoleManager.sharedInstance.writeOnConsoleLog(logg)        }    }

但这种方法的问题是

我将在通话中得到额外的论据
如果我喜欢下面的话

print("some comments",Obj1,Obj2)

所以我必须这样使用

print("some comments \(Obj1) \(Obj2)")

2.我会得到错误,如无法将'[AnyObject]’类型的值转换为预期的参数类型’String!’如果我尝试直接打印对象

print(obj)

所以我必须调用对象的描述方法

print(obj.description)

3.我必须包含我在上面引用的功能定义,无论我想要哪个功能但是在NSLog的情况下,它在一个地方全局定义

所以现在我正在寻找一个稳定的解决方案,将swift中的print内容重定向到文件中

所以我可以像往常一样快速使用印刷品

更新:

我尝试覆盖打印但我得到的方法不会覆盖其超类中的任何方法

解决方法 首先,用宏覆盖NSLog是非常糟糕的方法.只需使用不同的函数名称并使用它.覆盖印刷更加脆弱.只需将其他名称命名即可.当有人看到NSLog或在代码中打印时,它应该不是一个技巧.

也就是说,只要你给它正确的签名,它通常可以在给定的模块中工作:

public func print(items: Any...,separator: String = "",terminator: String = "\n")

(编辑:修正了签名,以确定打印的确切方式,而不仅仅是显示文档.)

您没有在函数中使用varargs语法(…),这就是它不接受多个参数的原因.如果你想让它接受非字符串(如obj)那么你必须接受Any,而不仅仅是String.

如果您只是创建自己的printlog函数(或任何您想要的函数),那么当然您可以使用任何方便的签名,但如果您要重载打印,则需要匹配其签名和功能.

这是完整的实施.这是一种可怕的方式.你不应该覆盖打印.但这就是Swift允许它完成的方式(分散在三个文件中只是为了证明它正在工作):

main.swift:

func print(items: Any...,terminator: String = "\n") {    Swift.print("My print is printing \(items)",separator: separator,terminator: terminator)}print("In main!")file1print()file2print()

file1.swift:

func file1print() {    print("file1!") // Calls our print}

file2.swift:

func file2print() {    print("file2!") // Calls our print}

再次,这是一个可怕的想法.只需创建一个新功能,它就会更好,更灵活,更清晰.但斯威夫特绝对可以做到.

请注意,如果您的真正目标只是将stdout或stderr写入文件,则无需以这种方式覆盖print或NSLog.只需重新打开你的stdout和/或stderr.例如:

let path: Nsstring = ...;freopen(path.UTF8String,"a+",stderr)

这将重定向stderr.使用stdout获取stdout.这适用于打印到stdout / err的任何内容,无论它是什么模块.

总结

以上是内存溢出为你收集整理的ios – 将打印重定向到文件,如将NSLog重定向到文件全部内容,希望文章能够帮你解决ios – 将打印重定向到文件,如将NSLog重定向到文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1059292.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存