码迷,mamicode.com
首页 > 编程语言 > 详细

Swift 语法小结

时间:2015-08-03 19:11:30      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

Swift 语法小结


1.  Optional 就是枚举
   An Optional is just an enum
       enum Optional<T>{
          case None
          case Some(T)
       }
2.Array的声明
  var a=Array<String>()
  var a=[String]()
  let a=[“A”,”B”,”C”]不可改
  let b=a[3]
  遍历Array可使用for in
  for array in a{
    println(“\(array)”)
  }
3.Dictionary
  var dic=Dictionary<String,Int>()
  var dic=[String:Int]()
  dic=[“title1”:1,”title2”:2]
  
  访问一个dictionary的值将返回Optional 
  let value=dic[“title3”]   返回nil
  使用tuple遍历Dictionary
  for (key,value) in dic {
     println(“\(key)=\(value)”)
   }
4.结构体Range  一个起点,一个终点,称之为合理类型,Range是范型
  struct Range<T>{
     var startIndex:T
     var endIndex:T
  }
  a.在Array中Range中的类型是Int型,因为Array是通过Int索引  Range<Int>
  b.String中时String的索引  Range<String.Index>
  c.声明  
    let array=[“a”,”b”,”c”,”d”]
    let subArray1=array[2...3]  ([“c”,”d”]) 闭区间
    let subArray2=array[2..<3]  ([“c”])  左闭右开区间
    遍历
    for i in [27…104]{
        println(“i=\(i)”)
    }
5.NSObject(swift中所有的类都可以继承NSObject)
  Objective-C中所有类的基类,比如UIViewController
6.NSNumber  装数字的类
  let n=NSNumber(double:35.5)
  将会以自身的值转为int或double
  let intversion=n.intValue  / n.doubleVaule /n.boolValue
7.NSDate  存储日期,也可以获取当前日期和时间
  Calendar,DateFormatter,DateComponents
8.NSData 比特包
  传递无类型数据,原始数据
9.数据结构  类,枚举,结构
  相同点:a.声明类似  b.可以有自己的属性和方法 c.都可以有自己的函数
  不同点:a.Enum本身是不能存储任何值的,可以将值存储在枚举的关联信息中
        b.枚举可以有计算型属性
        c.结构体和类可以初始化
        d.类有继承的性质,类型和转化都属于类的性质
        e.枚举和结构体是 值传递,类是 引用传递
10.override  重写父类方法的关键字
   final 可以将一个方法标为final,表示这个方法不能被重写
11.类和实例都有自己的方法和属性


   var d:Double = -10
   if d.isSignMinus {//isSignMinus是否是一个负数
       d=Double.abs(d) //取绝对值
   }
   isSignMinus是实例d的变量或者说是d的属性
   abs是Double类的方法(所有对象共享),向该方法中传入需要操作的Double类型的实例
   类方法 static func abs(d:Double) -> Double
12.参数名
   所有方法所有的参数都有一个内部名和外部名
   内部名:在方法中拥有一个本地变量的名字,方法中冒号之前的
   外部名:调用者准备使用的,调用方法是在冒号之前的
   a.使用外部名
     func foo(extenal internal:Int){
       let local=internal
     }
     func bar(){
       let result=foo(external: 123)
     }
   b.不使用外部名  _表示会被忽略,所有方法默认是采用该方式
   //func foo(internal:Int)
     func foo(_ internal:Int){
       let local=internal
     }
     func bar(){
       let result=foo(123)
     }
   c.强制使用内部名 #
     func foo(#internal:Int){
       let local=internal
     }
     func bar(){
       let result=foo(internal:123)
     }
    d.非第一个参数推荐使用内部名和外部名,当然,你可以使用_忽略外表名,但这不是标准的做法
     func foo(first:Int,externalSencond second:Double){
       let local=second
     }
     func bar(){
       let result=foo(123,externalSencond:5.5)
     }
13.Property Observers(属性观察)
   var someStoredProperty:Int = 42{
      willSet{newValue}//属性设置前被调用
      didSet{oldValue}//属性设置后被调用,可以用来对用户界面进行更新
   }
    override var someStoredProperty{
      willSet{newValue}
      didSet{oldValue}
   }
   使用场景:a.在自己的类中需存储属性,当其他方法设置它的值时,获得一个通知
           b.当继承了某些类,你并不需要对这些类中的属性做什么修改,但当它们改变时你想知道
14.lazy  只有用到的时候才会被初始化
   a.如果使用了很多资源,用lazy是不错的选择
     lazy var brain=CalculatorBrain()     
   b.初始化的时候在后面放一个大括号,也就是通过执行这个闭包来初始化这个属性,但这个闭包直有在property被用到的时候才会执行
     lazy var someProperty:Type={
        return <the constructed vaule>
     }()
   c.可以使用一个方法来进行初始化,只有标记为lazy才可以这样用,因为在类初始化之前,类中的方法都是不可以被调用的
      lazy var myProperty=self.initializeMyProperty()
15.initialization 初始化
   a.无父类的类,默认有一个init()方法
   b.如果一个结构体没有初始化,它将默认得到一个将所有属性作为参数的初始化方法,不需要实现
     struct MyStruct{
        var x: Int=42
        var y: String=“moltuae”
        init(x:Int,y:String)
     }
    c.在初始化方法里面可以设置任何属性的值,包括常量和变量
    d.在类或结构体中可以调用自己的init方法 self.init(),类中可以调用父类的初始化方法 super.init()
  


   



版权声明:本文为博主原创文章,未经博主允许不得转载。

Swift 语法小结

标签:

原文地址:http://blog.csdn.net/xiaoluoli88/article/details/47259747

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!