Swift Language - GaoZhenWei/SwiftLearning GitHub Wiki
1. Swift中延时调用某个方法
dispatch_after
封装一个通用的函数:
Step 1: 使用GCD(Grand Central Dispatch)中的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时,需要使用
?
来定义变量
CustomStringConvertible
协议打印一个类的对象
3. Swift中实现一般在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来实现这个协议,可以保证类的核心功能的整洁。
Singleton(单例)
的实现
4. Swift2.1的Swift2.1语法中实现单例更加的简洁,可以有以下两种方法:
方式一:
class SingletonClass {
static let sharedInstance = SingletonClass()
}
方式二: 适用于在第一次创建单例时需要做一些初始化操作
class SingletonClass {
static let sharedInstance: SingletonClass = {
let instance = SingletonClass()
// 初始化操作
return instance
}()
}