zoukankan      html  css  js  c++  java
  • Swift入门 一

    2015-11-05

    Swift代码 

    开发技巧:

    • 自动类型推导: option + click 查看变量/方法的说明
    • 能不写类型就不写类型,减少冗余代码
    • 苹果推荐我们先定义常量,只有需要修改的时候才定义变量

    数据类型:

    • 类型安全的语言,在任何情况下都不会进行自动类型转换(隐式类型转换),所有的转换都必须是显示的
    • 只有相同类型的值才能进行赋值
    • 哪怕是CGFloat和Double之间也必须进行转换  
    //  常量 let  
    let number: Int
    number = 10
    let a = 10 //自动类型推导 option + click 查看变量/方法的说明
    //  变量 var  
    var value: Double
    value = 20

    元祖

    • 可以将多个值保存在一起
    • 元祖可以保存不同数据类型的值
    • 元祖和数组一样,可以通过索引访问元祖中保存的值,除此之外,还可以给每一个值起一个名字,将来通过这个名字来访问对应的值,还能在定义的同时取出元祖中的值
    let number = (10, 11, 12)
    //通过索引访问
    number.0  // 10
    number.1  // 11
    number.2  // 12
    
    let person = (name: "gm", age: 30,score: 100)
    // 通过名称访问
    person.name
    person.age
    person.score
    
    let values: (String, Int, Double) = ("gm",30,99.9)
    let (name, age, score) = ("gm",30,99.9)
    name
    age
    score
    

    if

    • 必须是bool值,取值true/false
    • 条件表达式中的()可以省略
    • {}不允许省略,哪怕只有一条语句
     if num == 10
    {
      print("值为10")
    }

    三目运算符

    • 用法和OC中一模一样,除了条件表达式只能是bool类型之外
    • 开发中三目运算符用的非常多
    let value = 10
    let res = value == 20 ? 20 : 0

    switch

    • 用法大致和OC中一样
    • 条件表达式()可以省略
    • break可以省略,不会穿透
    • OC 中如果想在case中定义变量,必须加上{},否则作用域混乱,而Swift不用
    • OC中default的位置可以随便乱写,会先判断完所有的case才会执行default,swift中不能随便乱写,只能写在最后
    • OC中default是可以省略的,swift default大部分是不可以省略的
    let number = 0
    switch number 
    {
      case 0:
        print("0")
      case 5:
        print("5")
      case 10:
        print("10")
      default:
        print("default")
    }

     可选类型

    • 在OC中可以给一个对象类型变量赋值为nil或者一个对象,而在Swift中如果想给一个变量赋值为nil那么必须明确指定为可选类型才可以,也就是说普通类型是不能赋值为nil
    • 如果以后但凡看到init后面跟上一个?,酒店代表初始化方法返回的值是可选的
    • 可选类型不能直接使用,如果要使用可选类型的值,就必须对可选类型进行解包
    • 解包: 告诉系统可选类型的变量,一定有值,乳沟可选类型的值没有值,我们又进行强制解包,那么会报错
    • 解包的方式: 加!
    let str = "http://aunty.com/"
    let url = NSURL(string: str)
    print(url!) //解包
    let num1: Int? = 10
    let num2: Int =20
    let sum = num1! + num2 //不推荐我们随便使用强制解包
    if let temp = num1  //可选绑定 {   let sum = temp + num2 }

    可选绑定

    • 专门用于解决强制解包的弊端
    • 开发中如果想使用一个可选类型的值,也不一定一定选用可选绑定,因为如果可选类型的值较多,而又属于同一个逻辑,那么一不小心就会形成if嵌套
    let url2 = NSURL(string: str)
    print(url2)
    if let temp = url2
    {
      print(abc)
    }
    
    let v1: Int? = 10
    let va: Int? = 20
    if let m =v1
    {
      if let n = v2
      {
        let sum = n1 + n2
      }
    }

    guard 

    • 类似于可选绑定,swift2.0推出
    • 只有条件为假才会执行else后面大括号中的代码
    func test()
    {
      guard let m = v1 else
      {
        print("没有值")
        return
      }
      guard let n = v2 else
      {
        print("没有值")
        return
      }
      let  _ = m + n
    }
    test()
    

    for循环

    • 基本用法和OC一样
    • 条件表达式必须是bool类型的值
    • 条件表达式中的() 可以省略
    • {} 不可以省略
    for var i = 0; i < 10; i++
    {
      print(i)
    }

    区间

    • 半闭区间: 0..<10 包含头不包含尾
    • 闭区间: 0...10 包含头也包含尾
    for i in 0..<10
    {
      print(i)
    }
    

    while 循环

    • 基本用法和OC一致
    • 条件表达式必须是bool类型的值
    • 条件表达式的()可以省略
    • 在OC中如果{}中只有一条语句,那么{}可以省略,而Swift不可以
    var value = 0
    repeat{
        print(value)
        value++
    }while value <10
    

    数组

    • 格式 var arr:[Int] = [数值1, 数值2, 数值3]
    • 不可变数组 let == NSArray
    • 可变数组 var
    • 不可以给不可变数组追加内容
    let arr = [10, 20, 30] //开发中用这种
    let arr2: [Int] = [10, 11, 12] 
    let arr3: Array<Int> = [10, 11, 12]
    
    var arr4: [Int] // 先定义后使用的时候加数据类型
    arr4 = [10, 11, 12]
    
    arr4[0] // 查找
    arr4[0] = 55 // 修改
    arr4.append(998) // 追加
    arr4.removeAtIndex(0) // 移除
    arr4.removeAll() // 全部移除
    arr.capacity //开辟存储空间的规则: 2 的倍数
    var arr5 = [Int]()  //如何创建空数组
    

    字典

    • {} 替换为[]
    • 去掉所有的@
    let dict = ["name": "gm", "age": 30]
    let dict2: [String : NSObject] = ["name": "gm", "age": 30]
    let divt3: Dictionary<String, AnyObject> = ["name": "gm", "age": 30]
    let dict4 = [String: AnyObject]() // 在企业开发中,使用频率最高的字典类型就是[String: AnyObject]
    
    var dict = ["name": "gm", "age": 30] //可变
    
    dict["name"] // 取值
    dict["name"] = "mm" // 更新
    dict["score"] = 99.9 // 新增 score之前是不存在的
    dict.removeValueForKey("name") //移除
    for key in dict.keys  // 遍历
    {
      print(dict[key])
    }
    //将dict中的key 赋值给k, value 赋值给v
    for (k, v) in dict
    {
      print(k)
      print(v)
    }
    
  • 相关阅读:
    ecshop中关于语言配置项的管理
    ecshop中猜你喜欢的原理
    CSS之Position详解(自cnblogs)
    包装类
    for循环的另一种写法
    date.calendar学习总结
    java对MySql数据访问
    java中对MySql的配置
    小程序在js里获取控件的两种方式
    样式一直没生效,发现css没加前面的小点!!!
  • 原文地址:https://www.cnblogs.com/aunty/p/4938736.html
Copyright © 2011-2022 走看看