有没有办法查看实时控制台日志以实时方式查看NSLog和其他调试消息,例如adb logcat?
所以这个答案我是否需要在发布应用程序之前禁用NSLog?提供了一种在生产环境中禁用NSLog的好方法,但不幸的是,这个解决方案似乎不适用于Swift项目.我的方法是将以下代码放在我用于项目中某些pod的桥接头.h文件中.
#ifdef DEBUG
#define DLog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
#else
#define DLog(...) do { } while (0)
#endif
Run Code Online (Sandbox Code Playgroud)
但是,在Swift代码中使用DLog会导致编译器声明它们是未经过识别的符号.是否有其他地方我应该放置这个#ifdef或者一般的Swift项目是否有不同的解决方案?
我有一个有几千行的应用程序,在该代码中有很多println()命令.这会减慢应用程序的速度吗?它显然是在模拟器中执行的,但是当你从app store/TestFlight存档,提交和下载应用程序时会发生什么.这段代码是否仍然"活跃",那么"注释掉"的代码呢?
它是字面上永远不会读或我应该在提交测试航班/应用程序商店时删除注释掉的代码吗?
好的,我的项目中有一堆辅助函数,我最初在一个名为Animate的类中.我很想知道声明func vc类func有什么好处.
让我们使用它作为示例类:
class Animate{
func moveView(...){
...
}
}
Run Code Online (Sandbox Code Playgroud)
所以我相信如果我有一个类func,我就不必实例化这个类了.
Animate.moveView(...)
如果我只用func声明函数,它将是:
Animate().moveView(...)
但是,如果我不将该文件声明为类,则:
func moveView(...){
...
}
Run Code Online (Sandbox Code Playgroud)
当我调用该函数时,它只是:
moveView(...)
Run Code Online (Sandbox Code Playgroud)
没有指示代码来自哪里,它可以在项目的任何地方使用.
这三种方式的优点和缺点是什么?是不是宣布一个不好的做法?或者,是否有一些边缘情况,这是非常有用的?例如,在我的情况下,我不需要一个类,因为我只是创建辅助函数而不是对象.
提前感谢您对此有任何见解!
我正在寻找 swizzleSwift.print功能的方法。覆盖它不是一种选择,因为如果您使用它可能会被绕过Swift.print(:)
选择器无法识别标识符:
@objc class func printSwizzle() {
guard let instance = class_getInstanceMethod(self, #selector(print(separator:terminator:))),
let swizzleInstance = class_getInstanceMethod(self, #selector(swizzlePrint(separator:terminator:))) else { return }
method_exchangeImplementations(instance, swizzleInstance)
}
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?因为 swizzling 是一个obj-c运行时特性。
我正在努力在app store上提交我的第一个Swift应用程序,我只是对如何处理我在应用程序中的打印语句感到好奇.例如
do {
try managedObjectContext.save()
} catch let error as NSError {
print(error)
}
Run Code Online (Sandbox Code Playgroud)