Swift中的AnyHashable
如 Dictionary 和 Set ,现在有新的类型 AnyHashable 能保存任何遵循 Swift 中Hashable 协议的类型.
从外部传语言传过来的都会转换成 AnyHashable,用swiftJSON 可以避免
static和class的使用
Swift中表示 “类型范围作用域” 这一概念有两个不同的关键字,它们分别是static和class。
static关键字
在非class的类型上下文中,我们统一使用static来描述类型作用域。这包括在enum和struct中表述类型方法和类型属性时。在这两个值类型中,我们可以在类型范围内声明并使用存储属性,计算属性和方法。static适用的场景有这些
struct Point {
let x: Double
let y: Double
// 存储属性
static let zero = Point(x: 0, y: 0)
// 计算属性
static var ones: [Point] {
return [Point(x: 1, y: 1),
Point(x: -1, y: 1),
Point(x: 1, y: -1),
Point(x: -1, y: -1)]
}
// 类型方法
static func add(p1: Point, p2: Point) -> Point {
return Point(x: p1.x + p2.x, y: p1.y + p2.y)
}
}
class关键字
class关键字相比起来就明白许多,是专门用在class类型的上下文中的,可以用来修饰类方法以及类的计算属性。要特别注意class中现在是不能出现存储类属性的.
static和class总结
1.类可以使用关键字static class 修饰方法,但是结构体、枚举只能使用关键字static修饰
在方法的func关键字之前加上关键字static或者class都可以用于指定类方法.
2.不同的是用class关键字指定的类方法可以被子类重写,但是用static关键字指定的类方法是不能 被子类重写的我们可以知道被static指定的类方法包含final关键字的特性--防止被重写.
Self 与self的区别
在swift 中使用Self ,系统会报错,提示
'Self' is only available in a protocol or as the result of a method in a class
1.Self可以用于协议(protocol)中限制相关的类型
2.Self可以用于类(Class)中来充当方法的返回值类型
protocol Copyable {
func copy() -> Self
func clamp(intervalToClamp: Self) -> Self
}
c
Self 与self总结
Self只能用在协议中或者作为某个类的方法的返回值类型,而self在实例方法中代指当前实例,在类方法中则代指当前类。
Self 可用于链式编程
filter与flatMap过滤的区别
filter返回的仍然是一个Optional数组,而flatMap返回的是一个非Optional数组。
一般推荐使用flatMap方法
defer 与NSRecursiveLock 使用
defer可以让我们在finally代码块中执行必须要执行的代码,在return之前出现
NSRecursiveLock。它可以允许同一线程多次加锁,而不会造成死锁。递归锁会跟踪它被lock的次数。每次成功的lock都必须平衡调用unlock操作。只有达到这种平衡,锁最后才能被释放,以供其它线程使用。
Swift_修饰符(final、override、discardableResult、mutating、lazy)
final 防止重写
mutating 实例化的时候,实参是不可改变,如果确实需要改的话加 mutating
convenience 便利构造器
lazy 懒加载
@discardableResult 取消如果不使用返回值的警告