美文网首页
Swift 2.0 (一)语法详解

Swift 2.0 (一)语法详解

作者: 小神猫 | 来源:发表于2016-06-16 18:37 被阅读122次

    swift 语法

    • 自己学习总结的笔记 : 希望能帮到大家,笔记的详细内容是和objective-c的语法进行比较,适合有OC基础的人阅读学习

    • 随着WWDC 2016的召开,苹果正式发布了Swift 3.0 Preview 1,这是苹果Swift 3语言的首个稳定开发者预览版。

    • 苹果在其swift.org官方博客中称,Preview 1版本比代码库中打包的snapshot版本稳定很多。更新的特性包括去掉++和--操作符,更加Swift化的语言形式。详细的改进列表可以参考这里 https://swift.org/blog/swift-3-0-preview-1-released/

    导入框架 :

    • import UIKit

    定义标示符

    • 1.在定义一个标示符时,必须明确告诉编译器标示符是变量还是常量
    • var 标示变量
    • let 标示常量

    定义变量 和常量

    • let/var 标示符的名称 :类型 = 赋值
    • var a : Int = 10;
    • let a : Double = 3.14;

    使用注意点 :

    • 如果一行中只有一条语句,那么语句结束时;可以省略
    • 开发中优先使用常量 ,发现需要修改时再改成变量
    • 常量的本质,指向的内存地址不能修改,但是可以通过内存地址获取到对象 ,之后修改对象内部的属性
    //定义一个变量
    var view : UiView = UIView()
    view = UIView()
    //定义一个常量
    let view : UIview = UIView()
    view.alpha = 0.5;
    view.frame = CGReck
    
    //创建UIView对象
    let rect : CGrect = CGRectMake(0,0,100,100)
    let view : UIView (frame : rect)
    //修改透明度
    view.alpha = 0.5;
    

    打印

    • printf(a)

    数据类型

    • Int和Doublelei类型
    • 有符号的
    • 无符号的

    类型推导

    • 如果在定义一个标示符时,有直接给标示符进行赋值,那么标示符后面的类型可以省略
    • 会自动根据后面的赋值类型推导出前面标示符的类型
    • 在Swift中可以通过option + 鼠标左键,来查看某一标示符的类型
    let n : Int = 10 == > let n = 10
    

    Swift中的基本运算

    • 相同类型来能运算
    • 在Swift中没有隐式转换
    • 隐式转换概念 : 如果将一个int类型和double类型进行基本运算,编译器会自动将int类型转换为double类型,然后进行运算
    let a = 10
    let b = 10.1
     //错误写法 let result = a + b
     //正确写法 :
     let tempB = (Int)b
     let result = a + tempB
     
     let tempa = (Double)a
     let result = tempa + b  
    

    逻辑判断

    • Swift中if和OC中的区别
    • if后面的()可以省略掉
    • if后面的判断句没有非0即真的概念
    • if后面的判断句必须有明确的真假 (Bool) -> true / false
    if m >5{
    print(a)
    }
    
    let isOpen = true
    if isOpen {
    print(a)
    }
    //if else用法
    let score = 92
    
    if scroe < 0 || scroe >100 {
    prinf("不合理的分数")
    }else if score >60{
    prinf("哎呀不错")
    }
    

    三目运算符

    • 语法结构和OC中基本一样
     let m = 40
     let n = 30
     
    let result = m > n ? m : n
    

    guard的使用 (守卫)

    • guard 是swift 2.0新增的语法,用来替代if的
    • 与if语法非常类似,可以提高代码的可读性
    • guard语句必须有else语句.语法如下
    • guard 判断句 else { //break / continue(循环中) /return(函数) }
     guard 判断句 else { 
     //break / continue(循环中) /return(函数) 
     }
    
      let age = 10
    func online(age : Int)
    {
    if age >= 18{
      if 带了钱 {
        if 带了身份证
        {
        print("go home")
        }
               }
                }
    }
    
    online (age)
    
    func online(age : Int){
      guard age >= 18 else{
      print ("回家去")
      return
      }
      guard 带了钱 else{
      print ("回家拿钱")
      return
      }
      guard 带了身份证 else{
      print ("回家拿身份证")
      return
      }
    }
    

    Switft 和OC中的差异

    • switch后面的()可以省略
    • case后面可以不加break ,如果不加break编译器到后面添加break
    • case后面可以判断对个条件,并且多个条件以,分割
    • 如果希望产生case穿透fallthrough

    Switch的特殊用法

    • switch判断浮点型
    let a = 3.14
    switch a {
    case 3.14:
    print("a就是整形")
    default:
    print ("a不是π")
    }
    
    • switch判断字符串类型
    let m = 20
    let n = 30
    
    let opration = "/"
    var result = 0
    
    switch opration {
      case "+":
      result = m + n
      case "-":
      result = m - n
      case "*"
      result = m * n
      case "/"
      result = m / n
      default :
      print("非法字符")
    }
    
    • switch判断区间
    • 区间
      • 区间通常指数字区间 0~9 100~200
      • 半开半闭区间 : 1..<10 1~9
      • 闭区间 : 1...10 1~10
     let number = 60
    switch number < 0 || number >100{
    
    }
    

    for循环的写法

    • 和OC的差异
    • for后面的()可以省略
    • for循环有更简便的写法
    //第一种写法:如果先希望打印比较的数字,之后依次向下打印
    for var i = 0; i < 10; i++{
    print(i)
    }
    //第二种写法 (开发中写)
    for a in 0..<10{
    print(a)
    }
    //如果下标示不需要使用,可以使用_来替代
    for _ in 0..<10{
    print("hello word")
    }
    

    while 和 do while 循环

    • while 循环
    • while后面()可以省略
    • 没有非0即真的概念
    let m = 10
    while m > 0{
      m-=1
      print(m)
    }
    
    • do while循环
    • while后面()可以省略
    • 没有非0即真的概念
    • 都换成了repeat
    var n = 10
    repeat {
       print(n)
       n-=1
    }while n > 0
    

    字符串的使用

    • OC和swift语言中的区别

    • swift中类型是 String

    • OC中字符串@"" ,Swift中字符串""

    • 使用String的原因

    • string 是一个结构体,性能更高

    • NSString 是一个对象

    • string 直接遍历

    • StringNSString之间的无缝衔接

    • 定义字符串

    • 定义不可变字符串(使用let修饰的是不可变字符串)

    let str = hello world
    
    • 定义不可变字符串(使用var修饰的是不可变字符串)
    var strM = hello world
    
    • 字符串的使用
    • 遍历字符串的长度
    for c in str.characters.count{
      print(c)
    }
    
    //获取字符串的长度
    let length =  str.characters.count
    
    • 字符串的拼接
    let str1 = "手机"
    let str2 = "在家里"
    
    let result = str1 + str2
    
    • 字符串和其他标示符之间的拼接
    let name = "why"
    let age = 18
    let height = 1.89
    
    let info = "my name is \(name),age is \(age),height is \(height)"
    
    • 拼接过程中的格式化
    let min = 3
    let second = 4
    
    let time = String(format: "%02d:%02d", arguments: [min, second])
    
    • 字符串中间的截取
    //截取方式1 : 将String类型转换层NSString类型 as就可以进行转换
    let urlString = "www.520it.com"
    let header = (urlString as NSString).substringToIndex(3)
    let footer = (urlString as NSString).substringFromIndex(10)
    let range = NSMakeRange(4,5)
    let middle = (urlString as NSString).substringWithRange(range)
    
    //截取方式2 : 使用String类型的方法
    let endIndex = urlSting.startIndex.advanced(3)
    let header1 = urlString.substringToIndex(endIndex)
    
    let starIndex = urlSting.endIndex.advanced(-3)
    let footer1 = urlString.substringFromIndex(startIndex)
    

    数组

    • 定义数组
    • 定义不可变数组使用 let 修饰
    • 定义可变数组使用 var 修饰
    //定义不可变数组
    let Array = ["why","yz","lmj","lnj"]
    //定义可变数组 
    //第一种写法
    var arrayM = Array<NSObject>()
    //第二种写法
    var arrayM = [NSObject]()
    
    //对可变数组的基本操作
    //增删改查 -- > 数据库 --> sqlite
    //添加元素
    arrayM.append("why")
    arrayM.append(18)
    arrayM.append(1.88)
    
    //删除元素
    arrayM.removeAtIndex(1)
    
    //修改元素
    arrayM[0] = "lmj"
    arraM[1] = 1.87
    
    //获取元素
    arrrayM[1]
    
    //遍历数组
    //基本遍历
    for i in 0..<array.count{
      print(array[i])
    }
    //for增强遍历方式(重要)
    for name in array{
      print (name)
    }
    
    //可以获取下标识,也可以获取元素 (重要)
    for(index,name) in array.enumerate{
      print(index)
      print(name)
    }
    
    //了解(遍历数组中的一部分元素)
    for name in array[0..<2]{
    print(name)
    }
    
    //数组的合并: 如果两个数组的类型一致,可以进行合并
    let array1 = ["why", "yee"]
    let array2 = ["lmj", "lnj"]
    
    let result = array1 + array2
    类型不同不能进行合并
    

    字典

    • 如何定义字典
    • []编译器会自动判断是一个个元素还是一个个键值对
    • 如果是一个个元素 ,那么编译器就会认为[]是一个数组
    • 如果是一个个键值对 ,那么编译器就会认为[]是一个字典
    //定义不可变字典
    let dict = ["name" : "xiaoming","age" : "18", "height" : "188"]
    
    //定义可变字典
    var dictM = Dictionry<String,NSObject>()
    var dicM = [String : NSObject]()
    
    //对可变元素的基本操作 : 增删改查
    //添加元素
    dictM["name"] = "why"
    dictM.updateValue(18,forKey : "age")
    
    //删除元素
    dictM.removeValueForKey("age")
    
    //修改元素
    //注意 : 如果在修改过程中能找到键值对,就进行修改,如果没有找不到对应的键值对,那么就会添加键值对
    dictM["name"] = "lmj"
    dictM["height"] = 1.69
    dictM.updateValue ""ForKey "name"
    
    //获取元素
    dictM["name"]
    
    //遍历字典key
    for key in dict.keys{
      print(key)
    }
    //遍历value
    for value in dict.keys{
      print(value)
    }
    
    //遍历字典中所有键值对
    for(key,value) in dict{
      print(key)
      print(value)
    }
    
    //字典的合并 : 相同类型的字典也不可以相加和合并
    var dicM1 = ["name" : "lnj" , "age" : 31]
    var dicM2 = ["rank1" : 1 , "score" : 99] 
    
    for (key, value ) in dicM2{
      dicM1[key] = value
    }
    dictM1
    

    相关文章

      网友评论

          本文标题:Swift 2.0 (一)语法详解

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