初学Swift 小总结

Swift 01


Swift最基本的语法变化

1.导入框架使用 import UIKit (例);
2.定义标识符时,要决定是变量还是常量;
3.语句结束时可以不加分号,前提是一行中只有一行语句 
  有多行语句时还是需要加分号; 
4.打印结果时使用 print("") ,与OC对比不需要添加@符号     

Swift 变量&常量

  • 变量

    • 使用 let 定义常量,定义后的常量不能修改;
    • 使用 var 定义变量,定义后的变量可以修改;
  • 如何使用

      import UIKit 
       
      //常量 
      let a : Int = 10  
      
      //变量 
      var b : Int = 10  
      
      //输出 
      print(a,b)    
    
  • 注意点

    • 定义前应该先定义为常量,需要时在转换成变量,防止被意外修改
    • 是指向的对象不可以再进行修改.但是可以通过指针获得对象后,修改对象内部的属性
  • 数据推导

    • 如果在定义一个标识符时直接赋值,则会根据赋值数据类型推导出标识符的数据类型
    • 所以这时可以省略标识符类型
    • 查看标识符类型 Option + 左键

Swift 基本运算

  • Swift基本运算中没有隐式转换
  • 需要在数据类型一样的情况下才可以进行运算
  • Int 转 Double 例 Double(m)

Swift 逻辑分支

  • if分支

    • if后面没有括号
    • 没有非零/非nil 即真
    • 需要真正判断true/false
  • 三目运算符

    • 与OC一样
  • guard (守卫)

    • Swift 2.0后新语法,方便使用,增强代码可读性
    • 判断为true时,执行代码块
    • 判断为false时,执行else {} 内的代码
    • 跳转语句一般为return / break / continue
      guard 条件表达式 else { 
      // 条换语句 
      break 
      } 
      语句组    
  • Switch
    • 基本使用与OC一样,Switch后面不带括号
    • case可以有多个值,值之间用逗号隔开
    • case结束默认带break,所以可以不写
    • 如果需要穿透,则需要用到关键字fullthrough
    • Switch支持多种数据类型 如浮点型 , 字符型
    • 可以使用区间判断
      • 半开半闭区间: 0..<10 0~9,不包括10;
      • 闭区间: 0...10 0~10,包括10;

Swift循环

  • for循环

    • 常规写法
     for var i = 0 ; i < 10 ; i ++ {
        print (i)
     }    
  • 区间for循环

     for i in 0..<10 { 
        print(i) 
     }  
     
     for i in 0...10 {
        print (i)
     }  
    
  • 特殊写法

    for _ in 0..<10 {
        print (i)
    }
    
  • while 和 do while

    • while后面必须要有正确的真假,没有非0即真

    • while后面可以没有括号
      *do while跟OC有很大的区别,使用repeat代替do

       let a = 0
       repeat {
          print (a)
          b++
       }while a < 20  
      

Swift字符串

  • 与OC字符串的区别

    • OC字符串是NSString,Swift字符串是String
    • OC字符串需要使用@,Swift字符串不需要,""即可
  • 定义字符串

      //不可变字符串
      let str = "Hello Swift"
      
      //可变字符串
      var strM = "Hello Swift"
      strM = "Hello Pisces" 
    
  • 获取字符串长度

    let count = str.characters.count

  • 遍历字符串

      var str = "Hello Swift"
      for c in str.characters {
          print (c)
      }
    
  • 字符串拼接

     //两个字符串拼接
     let str1 = "Hello"
     let str2 = "Swift"
     let info = str1 + str2
     
     //字符串与数据类型拼接
     let name = "Pisces"
     let age = 20
     let info = "My name is \(name) , I'm \(age)years old"
     
     //字符串的格式化,比如时间 03:04
     let min = 3
     let sec = 4 
     let time = String (format: "%02d:%02d", arguments: [min, sec]) 
    
  • 字符串的截取

      //最简单的方式就是转换成NSSring来截取
      
      let str = "Hello Swift"
      //从第0个位置开始截取到第几个位置
      var subStr = (str as NSString).substringToIndex(5) 
      //从第几个位置开始截取
      subStr = (str as NSString).substringFromIndex(6) 
      //从第几个位置开始截取,截取多长
      subStr  = (str as NSString).substringWithRange(NSRange (location: 0,length: 11))
    

Swift数组

  • Swift数组类型是Array , 是一个泛型集合

    • 定义一个不可变数组
      let array :[NSObject] = ["Swift",2.0]
    • 定义一个可变的数组 必须初始化才能使用还需要注意数据类型
      var arrayM : [String] = [String]()
      arryM = ["Swift"]
  • 声明一个Array的类型可以使用以下代码之一

       //尖括号内为类型
       var arrayM1 : Array<String> 
       
       var arrayM2 : [String]
    
  • 声明的数组需要进行初始化才能使用,数组类型往往是在声明的同时进行初始化的

  • 对数组的基本操作

       var arrayM : [String]
       array = ["Hello"]
       
       //添加数据
       array.append = "Swift"
       //移除元素
       array.removeFirst()
       //更改数据
       array[0] = "Pisces" 
       //查看数据
       array[角标] 
    
  • 数组的遍历

    • 遍历数组可以使用一般的for 循环 或者 for in

    • 遍历数组的同时获取下标值

      let names = ["Swift","Pisces","JYD"]
      for (index,name) in names.enumerate() {
          //下标
          print (index)
          //数据
          print (name)
      }
      
  • 数组的合并

      //只有相同类型的数组才能合并
      var array1 = ["hellow" , "Swift"]
      var array2 = ["Pisces", "JYD"]
      var array = array1 + array2
    
    • 不建议在一个数组中放多种数据类型

Swift字典

  • Swift的字典类型是Dictionary,也是一个泛型集合

    • Swift中使用let修饰的字典是不可变字典
    • Swift中使用var修饰的字典是可变字典
  • 在声明一个Dictionary类型的时候可以使用下面的语句之一

      var dict1 : Dictionary <Int,String>
      var dict2 : [Int:String] 
    
  • 声明的字典需要进行初始化才能使用,字典类型往往是在声明的同时进行初始化的

      //定义字典的同时,进行初始化
      var dict = ["name" : "Pisces","age" : 21]
      
      //Swift中任意对象,通常不使用NSObject,使用AnyObject
      var dict2 : Dictionary <String,AnyObject>
      dict2 = ["code" : "Swift","author" : "JYD"]
    
  • 对字典的基本操作

      var dict = ["name" : "Pisces","age" : 21]
      
      //添加数据
      dict["height"] = 1.88
      
      //删除数据
      dict.removeValueForKey("height")
      
      //修改数据(二选一)
      dict["name"] = "JYD"
      dict.updateValue(20 , forKey:"age")
      
      //查看字典
      dict
    
  • 字典的遍历

    • 字典的遍历可以分为遍历字典中所有的值或者所有的键以及所有的键值对

      //遍历所有的键值对
      for (key,value) in dict {
          print (key) 
          print (value)
      }
      
    • 使用for in的方法去遍历

  • 字典的合并

      //字典的合并不能使用相加的方式
      var dict1 = ["name" : "Pisces","age" : 20]
      var dict2 = ["height" : 1.88,"weight" : 70]
      
      for (key,value) in dict1 {
          dict2[key] = value
      }  
    

元组

  • 元组是Swift特有的,OC并没有相关类型

  • What is this?

    • 它是一种数据结构,在数学中应用广泛
    • 类似字典或数组
    • 可以用于定义一组数据
    • 组成元组类型的数据可以称为“元素”
  • 元组常见写法

      //定义一个"人"的元组
      let person = (name : "Pisces",age : 21, height : 1.88) 
      
      //取值(方式二选一)
      print(person.name)
      print(person.0) 
    

Swift可选类型

  • 概念

    • 在OC开发中,如果一个变量暂停不使用,可以赋值为0(基本属性类型)或者赋值为空(对象类型)
    • 在Swift中nil是一个很特殊的类型,因为和真实的类型不匹配所以是不能赋值的
    • 但是开发中赋值nil,在所难免.因此推出了可选类型
  • 定义可选类型

    • 一般的定义方法
      let str : Optional<String> = nil
    • 语法糖(经常使用)
      let str : String? = nil
  • 可选类型的基本使用
    • 使用print直接打印可选类型的值都会带有Optional

    • 强制解包就没有Optional

    • 强制解包会很危险,程序容易崩,所以使用可选绑定获取可选类型的值,先判断可选类型是否为空,不为空时才打印

      //定义可选类型
      var name : String? = nil
      //赋值 
      name = "Swift"
      //强制解包 
      print("name!")
      //可选绑定 
      if let name = name {
          print("name")
      } 
      

Swift类型转换

  • is : 判断一个实例是否为某一个类型
  • as : 把一个实例转化成某一个类型
    • as?把实例转成可选类型
    • as!转成具体的类型,但是注意:如果不是该类型,那么程序会崩溃

例子

     //定义一个数组
     var array : [AnyObject] = [21 , "Swift"]
     
     //获取数组中的值
     let object = array.first
     
     //判断实例是否为某一类型
     if object is Int {
        print ("是整型")
     }else {
        print ("非整型") 
     }
     
     let age = object as? Int 
     
     print (age) //结果: Optional(21)
     
     let codeNmae = array[1] as! String
     
     print (codeName) //结果: Swift
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容