美文网首页
Swift关键字

Swift关键字

作者: Isy | 来源:发表于2016-07-31 14:55 被阅读138次
    //构造方法
        init() //构造函数
        init?() //可失败的构造函数
        init!() //
    
    //通用泛型
    id   Anyobject 
    
    //属性相关
    (setter==)(getter==)在swift中被忽略
    nullable   ?
    nonull  
    未标记  !
    
    //闭包
    swift中的闭包默认捕获变量的方式相当于oc中block标记__block方式
    
    //类相关
    不能在swift中继承oc的类
    如果在swift中遇到oc中不支持的命名可以用@objc(name)为属性、枚举、方法、、起个别名
    @nonobjc用来标记oc中不支持
    dynamic将属性或者方法标记为dynamic就是告诉编译器把它当做oc里的属性或者方法来使用(runtime)
    #keyPath(class.property) == "property"
    @IBDesignable 
    @IBInspectable
    
    @NSCopying
    
    coreData @NSManaged
    
    as
    
    String.Index and Range
    
    NS_SWIFT_NOTHROW 将不会使用swift的异常抛出机制
    
    is   isKindOfClass
    
    CF_SWIFT_NAME这个宏可以将c中的属性或者函数转换为swift
    
    Color ColorCreateWithCMYK(float c, float m, float y, float k) CF_SWIFT_NAME(Color.init(c:m:y:k:));
    
    如果使用了NS_ENUM 在swift中被处理为对应的枚举,没有NS_ENUM会翻译成为结构体 
    
    NS_OPTIONS修饰的枚举,在swift中是OptionSet类型结构体。
    
    将oc的方法或使用 NS_SWIFT_UNAVAILABLE()可以让他在swift中不可用
    
    将oc的方法或者属性使用NS_SWIFT_NAME()可以为他们在swift中命一个别名
    
    // return:返回aString的索引,如果未找到的话则返回 NSNotFound // 注:NSNotFound在Objective-C中定义为NSIntegerMax,我们在期望此方法在Swift中调用能返回nil 重定义Objective-C接口
    - (NSUInteger)indexOfString:(NSString *)aString NS_REFINED_FOR_SWIFT; 
    
    @available()属性声明来指定可用性信息。例如:
    @available(iOS8.0,OSX10.10,*)
    funcstartUserActivity()->NSUserActivity{
    ...
    }
    
    @INLINE
    
    这个属性提供编译器内联提示。有效的值为 __always
     和 never
    。除非我非常确定需要,否者我不会使用这个(特别是 __always
    )。关于它的使用方式还不是很清楚。在一些有限的测试中它还能生效,但不同测试环境效果也可能不同。
    修改:进一步解释,尽管 LLVM 有强制内联的概念,但我们现在并不清楚这个属性是否与其直接关联。我们也不清楚是否有大小限制导致编译器忽略它,跳过内联。理论上它本应该有这个行为,但是我不敢保证它有。
    记住 @inline
     属性在 debug 编译下会被忽略(当 optimization 被关闭)。
    (译者注:关于 optimization 可以看[这篇文章](http://ios.jobbole.com/81937/))
    @TRANSPARENT
    
    我原本不把这个列入清单。它会使编译器更早地在构建流程中进行内联函数。它的作用是使[“像(Int, Int)这种非常简单的函数”不应该是一个独立的函数”](https://devforums.apple.com/message/988972#988972)
    @transparent
     函数是内联的,即使是在没有 optimization 的 debug 模式下, 所以像 1 + 1
    这种简单函数也可以调用运行很快. 否则它的作用就像是 @inline(__always)
    .
    
    @AVAILABILITY
    
    这个属性标记那些只在某些特定版本或平台上有效的对象。第一个参数是平台。可以是*
    (所有)、iOS
     或 OSX
    。如果需要针对多个不同平台,可以指定多个 @availability
     属性。
    第二个参数可以是 unavailable
    ,表明对于给定的平台不可用。相对地,你可以声明一个或多个版本的组合:introduced
    , deprecated
    , 和 obsoleted
    。Obsoleted 意味着已被移除,deprecated 表示如果使用就会给出警告。最后一个参数你可以添加 message
    ,当被使用的时候,编译器会输出这些提示。一些例子:
    
    @availability(*, unavailable)
      
      func foo() {}
      
      @availability(iOS, unavailable, message="you can't call this")
      
      func foo2() {}
      
      @availability(OSX, introduced=10.4, deprecated=10.6, obsoleted=10.10)
      
      @availability(iOS, introduced=5.0, deprecated=7.0)
      
      func foo3() {}
    
     @asmname
      
      该属性给出了函数、方法或属性实现的符号名称。如果你已经知道对应的函数参数及其类型,那么就可以直接调用Swift的内部标准库函数,甚至不用头文件,也可以方便地调用C语言编写的函数:
      
      [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
      
      @asmname("function") func f()
      
      @unsafe_no_objc_tagged_pointer
      
      上面这个仍然是个谜,但我猜测它是在告诉Swift与Objective-C联系的时候不要使用tagged pointer。
      
      @semantics
      
      这又是另一个谜。参数看起来像是array.mutate_unknown或array.init这样的字符串数组。想必这是要告诉编译器(或静态分析器)函数是如何工作的。
    
    @autoclosure 关键字,是 Swift 引入的一个便捷操作,旨在让我们使用闭包作为参数的时候,更加的方便,简化语法形式,我们就来看看如何使用吧。
    
    
    @warn_unused_result 函数返回值
    warn_unused_result你可以为方法添加这个属性,这样当你对函数不正确调用,或者调用该方法却没有使用它的结果时,就会获得提醒。message 参数用来提供当你调用方法却没使用结果时编译器给出的警告。
    mutable_varient 用来提供你所使用的non mutating 方法的mutating 版本方法的名字。比如,Swift标准库里面提供mutating 方法SortInPlace() 和 non mutating方法 sort() 如果你调用sort() 但却并没有用到它的结果,编译器就会猜测你想用的是SortInPlace()。
    

    相关文章

      网友评论

          本文标题:Swift关键字

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