• Swift的基础,操作符,字符串和集合类型



    这篇文章主要解说苹果Swift官方指南的第二章前四节的要点内容,假设想看完整的英文文档能够去苹果开发人员页面下载。


    Basic


    声明常量let

    声明变量var

    凝视依然使用"//" "/**/", 注意这里"/**/"在Swift能够嵌套使用

    表达式结尾不再有分号


    整数

    你能够声明为Int或者UInt,他们本身适应不同平台(64位, 32位),类似于NSInteger,NSUInteger
    也能够直接声明为指定字节数的Int,如: Int8, Int32...

    Float-pointing


    Float,Double类型不是基本数据类型,而是一个Float-Pointing类型的数字,Float有32位。Double则64位表示。

    类型推导

    Swift中不再支持隐式转换。这样保证了安全性,所以在运算中也要将同样的类型进行运算。
    var i1: UInt8 = 5
    var i2: UInt16 = 2_000
    var sum = UInt16(i1) + i2  //2001
    

    别名

    typealiaskeyword,类似于C系列里的typedef
    例:
    typealias MyInteger = Int
    var mi: MyInteger = 8


    Boolean

    与oc不同,Swift的boolean为true。false.类型为Bool
    另外if不再支持对0或者非0的推断。仅仅推断Bool或者Optional类型

    比如
    var i = 1
    if i {
        //会引发编译错误
    }


    元组


    Swift的元组这个十分灵活且好用的内容。它能够存在和适用于不论什么地方差点儿。

    var http404Error = ("error", 404)
    var (statusMessage, statusCode) = http404Error

    你能够通过statusMessage或者statusCode直接訪问元组中的值。
    更简洁的方式,能够是.0 .1来訪问,比如
    var code = http404Error.1 //404

    事实上在用playground的时候能够看到右边对元组的显示

    该元组以(.0 "error", .1 404)结构进行存储所以能够直接訪问


    假设我们仅仅想获取code忽略message能够这样进行訪问

    var (_ , code) = http404Error

    这样就能够不去管message而直接拿到code了


    文档中还解说了一种带描写叙述的初始化方式,如:

    let http200Status = (statusCode: 200, description: "ok")


    Optional与if语句


    if语句支持对optional类型的推断,比如String的toInt()函数你跟进去会发现它的返回值是Int?

    这样我们就能够在if中对其进行推断

    let number = "1sdd"
    var isIn = false
    let convertN = number.toInt()
    if convertN {
        isIn = true
    }
    isIn  //false

    上面这个样例即使将赋值语句放入if的statement中也成立,
    假设number这个str能够转成Int。则isIn为true


    nil


    nil与OC中的nil为空指针不同,Swift里的nil是一个NilType,
    在Optional里,能够隐式的给其赋值为nil
    var a: String?
    这样a默觉得nil

    Assert


    与C中assert,OC中NSAssert使用方法相似,
    assert(statement, message)
    statement为true断言方可通过


    运算符


    Swift支持大部分的主要的C运算符
    注意的是,支持对float-pointing进行模运算(%)
    另外提供了a..b,a...b区间的支持,前者为(a,b), 后者为(a, b]

    一元运算符+除了进行数学运算外。也能够对String进行拼接
    逻辑运算符仍然主要使用"&&" "||"
    &&比||有着更高的优先级

    字符串和字符


    两个类:String,Character


    在Swift中,String属于value type 传递时会被拷贝,而不是指传递引用。

    这样能够避免未知的改动。


    声明空字符串

    /*Empty String*/
    var statement: String?
    var empty = ""
    var anoEmpty = String()
    if empty.isEmpty {
        statement = "empty string"
    }
    statement

    isEmpty函数推断是否为空,经常使用的函数还有

    countElements 返回字符个数

    String没有length函数,有lengthOfBytesUsingEncoding()函数,来获取指定字符集下的字符串长度

    遍历则直接使用for-in来获取每一个字符

    字符串的插入能够直接使用(),比較不再使用isEqualToString: 而是通过"=="

    前后缀函数 hasPrefix() hasSuffix()

    大写和小写转换 uppercaseString() lowercaseString


    在Swift里我们能够通过訪问String的utf8。utf16,unicodeScalar来获取指定字符集下的unicode值

    scalar的value为unicode值。直接訪问则为字符


    字符也能够使用一元运算符"+"来进行拼接



    集合类型


    Swift有两种主要的集合类型 Array,Dictionary

    let声明则为常量。var声明则为变量,不再有Mutable类来维护可变类型
    可是须要注意的是, Array常量已有下标的值仍能够改动,仅仅只是不能够改变长度了。


    两种数据结构都支持泛型

    let i: Int = 4
    let d: Int = 3
    
    var arr: Array<Int> = [i, d]
    var strings: String[] = ["123", "nihao"]
    var anoStrings : Array<String> = strings


    相同有isEmpty,count等函数

    let isEmpty = arr.isEmpty  //false
    let count = arr.count   //2


    数组的增删能够通过函数进行
    append()
    insert(atIndex:)
    removeAtIndex()
    removeLast()等
    另外在结尾加入元素或者数组能够直接通过 "+="

    var arr = [6,3]
    
    arr += 5   //[6,3,5]
    arr.insert(10, atIndex: 0)  //[10,6,3,5]
    arr.removeAtIndex(0)   //[6,3,5]
    arr.removeLast()   //[6,3]
    


    空数组和带參数初始化的数组
    var emptyArr = Array<Int>()
    var pArr = Array<Int>(count:3, repeatedValue:0)


    数组属于有序存储。而字典则为无序
    注意的是Swift里的字典中的Key能够为String。Int,Double和Bool类型

    如:
    var dict: Dictionary<Int, Int> = [4 : 8, 10 : 20]

    这里的键值都为Int类型,这在OC里肯定是不同意的

    Dictionary也有count函数记录键值对的个数

    另外介绍一个updateValue(forKey:)函数
    该函数返回值为valueType value?
    假设參数key在字典中并没有则会给字典加入新键值对,可是返回值为nil。

    假设有键,则讲新值赋进去。返回旧值。


    dict.updateValue(50, forKey: 10)   //20
    dict   //[4 : 8,10 : 50]
    dict.updateValue(100, forKey: 50)   //nil
    dict   //[4 : 8, 10 : 50, 50 : 100]

    删除键值对则使用removeValueForKey()函数

    遍历字典能够结合Tuple元组来实现
    for (key, value) in dict {
       //do someting with key and value...
    }
    遍历键或者值则使用dict.keys dict.values来訪问
    for key in dict.keys {
       //do someting with key...
    }

    空字典的创建则类似于数组
    var emptyDict = Dictionary<String, String>()




    以上为这篇博客所有内容,欢迎指正和讨论。



  • 相关阅读:
    Win10下Anaconda命令行相关操作
    【问题解决】module 'cv2.cv2' has no attribute 'face'
    LeetCode 53. 最大子序和
    从尾到头打印链表
    字符串逆序
    交换俩字符串
    LeetCode 147. 对链表进行插入排序
    LeetCode 面试题 02.08. 环路检测
    LeetCode 92. 反转链表 II
    LeetCode 143. 重排链表
  • 原文地址:https://www.cnblogs.com/llguanli/p/7363310.html
Copyright © 2020-2023  润新知