Swift中使用NSLog的问题

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

class Foo {}
NSLog("%@",Foo())

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

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

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

class Tom:CustomDebugStringConvertible{
    var debugDescription: String {return "勒布朗-詹姆斯"}
}

NSLog("\(Tom())")
时间: 2024-10-31 17:18:03

Swift中使用NSLog的问题的相关文章

Swift Explore - 关于 Swift 中的 isEqual 的一点探索

在我们进行 App 开发的时候,经常会用到的一个操作就是判断两个对象是否相等.比如两个字符串是否相等.而所谓的 相等 有着两层含义.一个是值相等,还有一个是引用相等.如果熟悉 Objective-C 开发的话,就会知道 Objective-C 为我们提供了一系列 isEqual: 方法来判断值相等,而 == 等于号用来判断引用相等. 我们来看一个 Objective-C 的例子就会更加明白了: NSArray *arr1 = @[@"cat",@"hat",@&qu

swift中判断设备是否打开定位

在基于LBS的项目中很多都会判断是否打开了定位功能.从而做提醒用户打开或者提醒到哪里打开等操作...在OC时候我们这么写: //检测是否开启定位 if ([CLLocationManager locationServicesEnabled] && ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized || [CLLocationManager authorizationStatus] ==

Swift中的延迟加载(懒加载)

Swift方式的延迟加载 而在Swift中,你只需一行代码即可实现此机制: lazy var players = String[]() 简单.简洁,直入主题. 但你得记住,你必须使用var关键字来定义延迟加载的属性,不能使用let关键字,因为常量必须在实例构建时赋值. 如果你想给延迟加载加上一些逻辑处理,Swift允许你在属性后面定义一个闭包调用(闭包的返回值会作为属性的默认值): lazy var players: String[] = { var temporaryPlayers = Str

Objective的宏到swift中该怎么办?

ReadMehtml, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMirror-scroll { overflow-y: hidden; overflow-x: auto; } .CodeMirror-lines { padding: 4px 0px; } .CodeMirror pre { padding: 0px 4px; } .CodeMirror-scrollbar-filler, .

【iOS】Swift中Playground,常量、变量、字符串等小结

一.代码及书写的几点变化(相比于OC) 1. 更像Java,Javascript或Python的格式了 2. 结尾的分号可写可不写了(同一行的多条语句中间必须加分号) 3. 不需要写main函数了,直接是从上往下执行 4. 文件后缀变.swift了,不再是.h与.m两个文件了 ...... 二.Playground Playground顾名思义,Play是玩的意思,ground是地方的意思.拿来玩.写demo或者测试很nice.在WWDC上演示了Playground实时显示,并演示了一个简单的小

在Swift中应用Grand Central Dispatch(上)

本文翻译自raywenderlich,原文:Grand Central Dispatch Tutorial for Swift: Part 1/2尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在Swift世界中很刺眼. 在这两篇教程中,你会学到GCD的来龙去脉.第一部分解释了GCD可以做什么和几个基本功能.第二部分,你会学到一些GCD所提供的进阶功能. 起步 libdispa

在swift中保存图片到相册

本来是没有必要把这么小的一个知识点写到博客中的,但是,由于OC中的一些语法在swift中实现的时候有些特别,所以单独写下来到博客中,希望能够帮助到有需要的同学. 1.OC中的写法 在OC中,我们需要保存图片到相册需要调用这个方法: void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo); 想来大家也都看过这个方法的头文件,

swift中 类似OC的宏定义

OC 中调试打印 /** *  自定义Log */ #ifdef DEBUG #define JYLog(...)        NSLog(__VA_ARGS__) #else #define JYLog(...) #endif // swift中我写了这么一个类,进行调试输出 调用方法  Debug.Log(error) import UIKit class Debug: NSObject{ // TODO: 为调试修改 private static let debug = true cla

在Swift中应用Grand Central Dispatch(上)转载自的goldenfiredo001的博客

尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在 Swift世界中很刺眼. 在这两篇教程中,你会学到GCD的来龙去脉.第一部分解释了GCD可以做什么和几个基本功能.第二部分,你会学到一些GCD所提供的进阶功能. 起步 libdispatch 是Apple所提供的在IOS和OS X上进行并发编程的库,而GCD正是它市场化的名字.GCD有如下优点: – GCD可以将计算复杂的任务