2019-01-25 20:57:50 qq_43678568 阅读数 641
                     

在Swift中如果想要以如下方式执行NSLog,则编译器必定抱怨:

class Foo {}NSLog("%@",Foo())
  • 1
  • 2

因为Foo是原生Swift类不是继承自NSObject,而NSLog需要其Description方法,所以我们必须使Foo派生自NSObject,然后重载Description方法:

class Foo:NSObject {    override var description: String {return "大熊猫侯佩"}}
  • 1
  • 2
  • 3

NSLog也支持字符串内插显示,这时你可以不从NSObject中派生,你只要遵守CustomDebugStringConvertible协议即可:

class Tom:CustomDebugStringConvertible{    var debugDescription: String {return "勒布朗-詹姆斯"}}NSLog("\(Tom())")
  • 1
  • 2
  • 3
  • 4
  • 5
           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

2016-08-12 18:34:37 Lucy_xiao 阅读数 700

初学Swift发现没有宏定义,只有自己制作NSLog了

定义NSLog是希望只在调试的时候输出所以要先设置相应的环境:

debug环境和release环境切换 
点击项目 -Edit Scheme- Run - info - Build Configuration-Debug/Release


自定义NSLog

1、设置DEBUG


2、  在app delegate文件中添加如下代码,添加后则所有控制器都可以使用
#file:获取所在文件的路径
#function:获取所在的方法
 #line:获取所在的行数

    func LMXLog<T>(message : T, file : String = #file, function : String = #function, line : Int = #line)
    {
// 获取打印所在的文件
#if DEBUG
       let fileName = (file as NSString).lastPathComponent
       
        print("(\(fileName)):(\(function)):(\(line))-\(message)")
  #endif
    }






2016-03-03 16:15:13 xiaonaiping061 阅读数 880
1、首先在Build Settings中找到 Swift Compliler-Custom Flags,并添加以下参数 -DDEBUG参数,如下图:



2、创建Log.swift文件并实现下面的函数

#if DEBUG
    func NKLog(message: String){
        NSLog(message)
    }
#else
    func NKLog(message: String){
//        NSLog(message)
    }
#endif


3、工程中调用就调用NKLog()就OK了。



2015-11-07 17:09:19 huanghyw 阅读数 4871

我的开发环境

  • 操作系统:OS X EI Capitan 10.11.1 (15B42)
  • 电脑型号:MacBook Pro(Retina 显示屏,15 英寸,2013 年末)
  • 处理器:2.3 GHz Intel Core i7
  • 内存:16 GB 1600 MHz DDR3
  • Xcode:7.1 (7B91b)

开始开发

如果没有苹果机的需要通过虚拟机安装OS X或者使用黑苹果,具体怎么弄的百度一下一大堆,我就不在这里说了。开发环境的搭建与安装也不说了,直入主题吧。

在开发过程中,如果想知道程序运行到某一个方法了,或者是想知道运行时的某个值是多少,一般有两种方法:1、Debug调试 2、日志信息输出。

记得以前刚开始学Java的时候,老是喜欢使用控制台打印变量。

System.out.println("asdfasdf");

现在切换到Swift,一样可以在控制台输出变量。

println("asdfasdf")

上面的swift代码行末尾没有分号,这个不是我写错了,这点有点像Python。swift语言在设计的时候借鉴过其他很多语言的有点,其中包括脚本语言。所以,有点像也不奇怪。

言归正传,这种方式的变量记录也就用在自己玩玩的时候,如果真的是认真的去做东西,这么记录肯定是不行的。

假设你做了一个项目,放到AppStore上面去了,下载的人还挺多的。某天用户A告诉你说某某功能不能用了,这时候就查看NSLog记录的日志,然后才能根据日志中输出的关键变量来大概分析产生问题的原因。

说了这么多,先看下NSLog的定义:

func NSLog(format:String, args:CVarArg)

该函数由格式化字符串和参数组成。

其实这个函数本身没啥好说的,只是想说明一下日志的重要性。
使用也很简单,写个小例子吧,我也是现学现用。

import Foundation

var str = "Hello, playground"

print(str)
NSLog(str)
for(var i=0;i<10;i++){
    NSLog("MySwift%d", i)
}

输出如下:
Hello, playground
2015-11-07 16:40:07.601 MyPlayground[77233:11735691] Hello, playground
2015-11-07 16:40:07.601 MyPlayground[77233:11735691] MySwift0
2015-11-07 16:40:07.601 MyPlayground[77233:11735691] MySwift1
2015-11-07 16:40:07.602 MyPlayground[77233:11735691] MySwift2
2015-11-07 16:40:07.602 MyPlayground[77233:11735691] MySwift3
2015-11-07 16:40:07.602 MyPlayground[77233:11735691] MySwift4
2015-11-07 16:40:07.602 MyPlayground[77233:11735691] MySwift5
2015-11-07 16:40:07.602 MyPlayground[77233:11735691] MySwift6
2015-11-07 16:40:07.602 MyPlayground[77233:11735691] MySwift7
2015-11-07 16:40:07.602 MyPlayground[77233:11735691] MySwift8
2015-11-07 16:40:07.603 MyPlayground[77233:11735691] MySwift9

不难看出,println函数和NSLog输出的区别。NSLog可以打印出当前输出时间与调用该日志函数的位置。

NSLog("MySwift%d", i)

注意一下上面这段代码。
字符串里面有一个占位符或者叫指示符『%d』,他代表的是数字,这种写法我也喜欢把它叫做字符串格式化。


占位符很多,如果不经常使用也记不下来,现在记录一下,方便以后查询。

指示符 描述
%@ 对象,String、Array、Dictionary等都是对象
%% 『%』字符
%d,%D 带符号的32位整数
%u,%U 无符号的32位整数
%x,%X 无符号的32位整数,按照16进制输出
%o,%O 无符号的32位整数,按照8进制输出
%f 64位浮点数
%e,%E 64位浮点数,按照科学记数法输出
%c 八位无符号字符
%C 16位Unicode字符
%a,%A 64位浮点数,按照科学记数法输出
%F 64位浮点数,按照16进制输出

NSLog在什么时候使用?这个问题其实没有一个绝对的答案。可以用在关键的变量记录上,也可以用在是否进入关键函数体的记录上。具体使用得看情况。

NSLog基本上算是介绍完了,日志记录是编程必须要掌握并且合理的利用起来的一门技能。

我准备在学习swift的过程中时刻记录,这篇博文就是这组swift学习系列博文的第一篇博文,写的有点拖沓。以后我的风格就是简洁,这个系列的博文就像是字典。以后忘记了,随时能过来查,而且还没那么多废话。

今天就到这,我得开始学swift基本语法了,学完了就来记录。

2016-06-25 14:55:53 AfirSraftGarrier 阅读数 1220

主要区别:

       1 NSLog会记录下时间而print没有。

       2 NSLog是线程安全的而print没有。

       3 print只在调试模式下在控制台输出而NSLog在运行模式也会。

总结说明:

       根据上面的区别可以看出一般用print,因为print比较快,而且只在调试模式下起作用,在不考虑线程安全问题时print是较好选择。

Swift简单体验

阅读数 235

没有更多推荐了,返回首页