美文网首页
Swift基本知识

Swift基本知识

作者: 蓝蓝的白云 | 来源:发表于2016-07-21 23:12 被阅读168次

    一、数据类型

    1.基本数据类型

    let a:Int = 12 //声明整形常量a  , let 代表常量,Int代表整形
    
    var b:Float = 10.2 //声明浮点型变量b,var代表变量,Float代表浮点型,初值为10.2
    
    let str = "helloWorld"
    
    str.characters.count //计算字符串长度
    
    str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) //计算字符串长度
    
    注:字符串相等判断: "==",字符串拼接判断:“+”
    
    str.uppercaseString  // 首字母大写
    
     str.lowercaseString // 首字母小写
    
    // 格式化字符串(两种方法)
    
    let str2 = String(format: "%02d:%02d", 1,2);  //方法1
    
    let str3 = String(format: "%02d-%02d", arguments: [1,2]) // 方法2
    

    2.数组 Array (跟OC里面的数组一样可以相互转换)

    a.不可变数组

    let array1 = ["A", "2", "3", "4"] //定义不可变数组array1
    
    // initWith/init在swift里面全部转换为(),代表初始化
    
    let array2 = [String]() //初始化定义不可变数组array2
    
    // 访问数组元素个数 .count
    
    // 数组遍历 for-in(明确指出数组的类型)
    
    for temp in array1 as [String]{
    
    print(temp.characters.count)
    
    }
    
    // 元组遍历
    
    for(index, value) in array1.enumerate()
    
    {
    
    print("index = \(index), value = \(value)")   // \(参数)为占位符
    
    }
    

    // b.可变数组

    var mutableArray = [String]() // 定义可变数组(类型为NSString)
    
    mutableArray.append("hello")  // 添加元素
    
    //mutableArray.append(23) //类型不匹配
    
    mutableArray.removeAll() //移除数组元素
    
    // mutableArray.removeFirst(<#T##n: Int##Int#>) 从第一个元素开始移除, 直到n结束
    

    3. 字典 Dictionary

    let dict = ["key1":"value1", "key2":"value2", "key3":"value3"] //定义不可变字典
    
    // 通过key值访问value
    
    print(dict["key1"])
    
    // for-in遍历
    
    for (key,value) in dict  // 遍历字典里面所有的key和value
    
    {
    
    print("key = \(key), value = \(value)")
    
    }
    
    var dict3 = ["key":"value"]
    
    for (tempkey, tempValue) in dict{
    
    // 如果key存在, 则是一个更新键值对操作, 否则是一个增加键值对操作
    
    dict3[tempkey] = tempValue
    
    }
    

    4. ? 与 !的应用

    // 如果一个值可能为nil, 那么这个值就是可选类型,用?标识
    
    // optional包围的就是一个可选类型
    
    // 可选类型不能直接使用, 必须进行强制解包,!强制解包, 对nil强制解包会造成崩溃
    
    var a1:String?
    
    a1 = "12345"
    
    // !!!!!unexpectedly found nil while unwrapping an Optional value 对一个空的可选类型进行强制解包
    
    // (a1 ?? "234")  对一个空的可选类型进行强制解包, 如果可选类型为nil, 则给他一个默认值
    
    print((a1 ?? "234").characters.count)
    

    二. 分支语句

    // if 条件语句()可以省略, {}不能省略
    
    // if 没有非0即真的概念, 只有true 和 false 的两种情况
    
    let tempValue  = 10
    if tempValue > 5{
    print("tempValue > 5")
    }
    

    1. 可选类型的条件分支

    let str:String? = "hello"
    

    a.if-let

    对可选类型的判断, 如果可选类型为空, 则不执行代码块, 如果不为空, 则用tempStr来接收此刻这个可选类型解包后的值
    
    // 只针对可选类型 ?
    if let  tempStr = str{
    print(tempStr)
    }
    if str !=nil // 安全处理,防止str为空导致crash
    {   str!  }
    

    b.if-let-where

    跟if-let 相似, where是对前面定义的这个局部变量在做一层判断
    if let tempStr = str where tempStr.characters.count > 2{
    print("tempStr.length = \(tempStr.characters.count)")
    }
    

    c. guard-let-else

    如果可选类型str为nil,则执行code代码块, 最后一定要return, 如果不为nil, 则强制解包后的值赋值给tempStr, 这样在{}外面就可以使用tempStr
    guard let tempStr = str else
    {
    //code
    return
    }
    tempStr...
    

    2. switch分支语句

    switch 不局限判断整形, 可以为浮点型, 也可以是字符串...
    switch 判断后面的小括号可以省略, 大括号不能省略
    case 后面至少要有一条执行语句!!!!并且case后面的大括号可以省略, break可以不写, 不会造成贯穿
    default一定要写, 并且只能写在最后
    let f = 3.2
    switch f
    {
    case 3.0:
    print("===3.0")
    case 3.1:
    print("===3.1")
    case 3.2:
    print("3.2")
    default:
    print("know")
    }
    

    3. for...in 遍历

    for (var i = 0; i < 5; i++){  swift2.2的时候被废弃
    }
    
    for var i = 0;i < 5; i += 1{
        print(i)
    }
    for i in 0..<5 { // 0..<5-----[0,5)  0...5-----[0,5]
    print("i = \(i)")
    }
    

    三. 枚举

    a.枚举值可以关联浮点, 字符串, 没有默认的关联值,关联如果是Int, 会默认的递增上去, 如果不是Int类型, 必须每个枚举值都关联上

    enum Month:CGFloat{ // 定义枚举
    case January = 10.1
    case February = 10.2
    case March = 10.3
    case April = 10.4
    }
    

    b.如果明确指出一个变量/常量是属于哪种枚举类型的话, 可以直接.枚举值, 否则就 枚举类型.枚举值

    /*
    let month:Month = .February  // 定义month枚举常量,值为February
    var month1 = Month.January //定义month1枚举变量
    month1 = .February
    */
    switch month{
    case .January:
    print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
    print(month)
    case .February:
    print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
    print(month)
    case .March:
    print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
    print(month)
    case .April:
    print("hashValue = \(month.hashValue), rawValue = \(month.rawValue)")
    print(month)
    }
    注:hashValue 的值为位置, rawValue为关联的值
    

    相关文章

      网友评论

          本文标题:Swift基本知识

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