zoukankan      html  css  js  c++  java
  • Swift 特殊关键字 与符号

    #available()

    函数来检查API函数的可用性

    // 判断当前版本是否 iOS8.0+,OSX10.10+以及以其他平台
    if #available(iOS 8.0, OSX 10.10, *) {
         // 当版本匹配时
    } 
    else
     { 
         //当版本不匹配时 
    }
    
    也可以放在方法前面, 使其方法在某个版本可用
    // iOS8.0+,OSX10.10+以及以其他平台可用
    @available(iOS 8.0, OSX 10.10, *)  
    func startUserActivity() -> NSUserActivity {  
    
    }   

    新的guard语法:

    这个新的语法允许你在一个代码周期中构建一个提前的退出点, 避免了大量的if 判断

    如果 a >= b 就会进入else直接退出
    guard a < b else { return }

    optional

    修饰 protocol时方法不用必须实现

    强制展开(!)

    如果对一个nil的optional 的变量进行强制展开(就是加上!), 会出现运行时错误, 所以如果对变量进行强制展开必须要保证Optional的变量不为nil

    使用问号(?)来替代原来的叹号(!

    if optionalChaining.string?.characters.count > 0 {
                
    }

    只有optionalChaining.string不为nil的适合才能访问characters

    convenience

    其内部一定要调用其同类的init方法完成初始化

    注意: 子类不能重写这个方法或从子类中以super的方式调用, 子类一旦重写这个方法调用的init方法就会调用这个方法, 所以不需要重写

    用法: 如果你想某些子类一定要调用某个初始化方法, 那么就可以在父类中加上一个convenience初始化方法, 这样子类每次创建对象的同时都会去调用这个init方法

        如果想强制子类一定调用这个方法, 可以结合required 修饰符在所调用的init方法前面加上required

    required修饰符的使用规则

    1. required修饰符能用于修饰类初始化方法。
    2. 当子类含有异于父类的初始化方法时(初始化方法参数类型和数量异于父类),子类必须要实现父类的required初始化方法,并且也要使用required修饰符而不是override
    3. 当子类没有初始化方法时,可以不用实现父类的required初始化方法。

      注意: 子类如果集成父类一定要在重写父类init方法时候调用[super init], swift强制这么做

    protocol SomeProtocol {
        init(someParameter: Int)
    }
    class SomeClass: SomeProtocol {
        required init(someParameter: Int) {
            // 这里是构造器的实现部分
        }
    }

      mutating

    修饰方法能修改同实例属性值

    协议 方法前面加上mutating 表示遵守协议的结构体 / 枚举能修改同实例属性

    结构体/ 枚举中 方法要修改同实例属性需要在方法前面加上mutating, 表示你可以修改同实例属性

    enum OnOffSwitch: Togglable {
        case Off, On
        mutating func toggle() {
            switch self {
            case Off:
                self = On
            case On:
                self = Off
            }
        }
    }
    var lightSwitch = OnOffSwitch.Off
    lightSwitch.toggle()
    // lightSwitch 现在的值为 .On

    typealias type

    // 对原有类型, 声明一个新名称, 相当于以前的typedef

    @testable

    当你的应用程序包含单元测试 target 时,为了测试,测试模块需要访问应用程序模块中的代码。默认情况下只有public 级别的实体才可以被其他模块访问。然而,如果在导入应用程序模块的语句前使用 @testable 特性,然后在允许测试的编译设置(Build Options -> Enable Testability)下编译这个应用程序模块,单元测试 target 就可以访问应用程序模块中所有 internal 级别的实体。

    fallthrough

    用在swich case 中表示, 上下case 可以一起执行

    __FILE__

    当前文件路径

    Defer 语句

    defer 语句用于在退出当前作用域之前执行代码。

    inout

    传进去的参数直接可以修改, 就像传进去是地址, 地址对应的值被修改,调用的时候在变量前面加上&

     

    deinit

    析构函数, 相当于oc中dealloc

    is

    一般做判断使用

    swift3.0 

    fileprivate  与 private

    fileprivate 就是以前的 private 整个文件都能访问

    private 现在是只能在当前class内部访问

    如果在extention访问private的变量 会报variable is inaccessible due to 'private' protection level

    open 与 public 

    现在swift 的变量作用域修饰符有如下几种(从高到低): open, public, fileprivate, private

    open: 以前的public, 所有地方都能访问, 并且能重写, 能继承

    public: 只能访问在module内部重写, 能访问. 继承

    inout

    inout作为函数声明时,引用传值的关键字。但是在调用的时候引用的是地址,所以在引用的时候要加上 &

    override func viewDidLoad() {
          super.viewDidLoad()
    
          var a = 10
          var b = 20
          var _ = test(a: &a, b: &b);
      }
      func test(a: inout Int, b: inout Int) -> Int{
          return a + b
      }

    nonmutating

    在声明值类型的实例为不可变变量,即let时,是不可以修改任何它内部的变量值的
    struct TTTTStruct {
        var name: String {
            get {
                return "123456"
            }
            
            nonmutating set {
                print(newValue)
            }
        }
    }
    
    class TTClass2: TTClass {
        override func ghjk() {
            let sttttt = TTTTStruct()
            sttttt.name = "4546"
            name = "1234"
            print(name)
        }
    }

    associatedtype

    associatedtype用于protocol中,associatedtype类型是在protocol中代指一个确定类型并要求该类型实现指定方法。

  • 相关阅读:
    使用CSS3制图
    hdu4585 &amp; BestCoder Round #1 项目管理(vector应用)
    ZooKeeperEclipse 小工具
    svn代码统计工具的金额
    【教你zencart仿站 文章1至6教训 高清1280x900视频下载】[支持手机端]
    [Django]models定义choices 字典中的页面显示值
    xml publisher根据条件显示或隐藏列
    hdu 1398 Square Coins(生成函数,完全背包)
    ubuntu软件中心崩溃
    PHP socket类
  • 原文地址:https://www.cnblogs.com/MrTao/p/5178019.html
Copyright © 2011-2022 走看看