swift基础知识点

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 取消如果不使用返回值的警告

你可能感兴趣的:(swift基础知识点)