美文网首页
swift基础知识点

swift基础知识点

作者: 乐毅ya | 来源:发表于2018-02-27 20:13 被阅读0次

    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基础知识点

          本文链接:https://www.haomeiwen.com/subject/krjuixtx.html