zoukankan      html  css  js  c++  java
  • 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

    别名

    typealias关键字,类似于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]

    遍历字典可以结合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>()
  • 相关阅读:
    BZOJ 2034 【2009国家集训队】 最大收益
    vijos P1780 【NOIP2012】 开车旅行
    BZOJ 2115 【WC2011】 Xor
    BZOJ 3631 【JLOI2014】 松鼠的新家
    BZOJ 4717 改装
    BZOJ 2957 楼房重建
    BZOJ 4034 【HAOI2015】 T2
    BZOJ 1834 【ZJOI2010】 network 网络扩容
    BZOJ 2440 【中山市选2011】 完全平方数
    BZOJ 2733 【HNOI2012】 永无乡
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/5091890.html
Copyright © 2011-2022 走看看