Swift Language - GaoZhenWei/SwiftLearning GitHub Wiki
1. Swift中延时调用某个方法
Step 1: 使用GCD(Grand Central Dispatch)中的dispatch_after封装一个通用的函数:
func delay(delay:Double, closure:()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
Step 2: 调用的方式如下:
// Delay for 2 seconds, then run the code between the braces.
delay(2) {
self.checkPassword()
}
2. Swift中使用?与!的区别
- 两者都用于定义一个Optinal类型的变量,即可以设置变量的值为nil
- 使用这两者定义之后,Swift编译器不再强制必须在初始化方法中赋初值了
- 使用
!定义的变量,在使用时Swift编译器会自动对其拆包得到实际值,无须我们手动去拆包 - 使用
?定义的变量,在使用时,需要手动去判断是否为nil,有值时需要手动拆包得到实际值,通常使用if let语句 - 当我们能够确定变量在运行期间一直都存在值,那么使用
!来定义变量,这样就避免了拆包操作,但是万一其值为nil,则会产生Crash - 当变量的值可能为nil时,需要使用
?来定义变量
3. Swift中实现CustomStringConvertible协议打印一个类的对象
一般在Swift中使用print函数打印一个对象时,控制台输出的信息是类名,不是我们想要的类的属性的信息。不过我们可以实现CustomStringConvertible接口来实现全局的自定义打印的信息,实现如下:
class Person {
var name: String!
var age: Int!
var birthday: String!
}
extension Person: CustomStringConvertible {
var description: String {
return "name = \(self.name) age = \(self.age) birthday = \(self.birthday)"
}
}
NOTE:可以使用extension来实现这个协议,可以保证类的核心功能的整洁。
4. Swift2.1的Singleton(单例)的实现
Swift2.1语法中实现单例更加的简洁,可以有以下两种方法:
方式一:
class SingletonClass {
static let sharedInstance = SingletonClass()
}
方式二: 适用于在第一次创建单例时需要做一些初始化操作
class SingletonClass {
static let sharedInstance: SingletonClass = {
let instance = SingletonClass()
// 初始化操作
return instance
}()
}