swift基础学习Demo汇总

作者: 小人不才 | 来源:发表于2017-09-21 19:30 被阅读40次

    篇幅比较长!!!如果真心想学习,还是找个安静的晚上,慢慢阅读,慢慢体会swift的轻妙之处,这里附上本人的github中的demo:https://github.com/tanzhiwen/SwiftTips

    欢迎指导学习!!!


    目录

    01-变量和常量

    02-运算符

    03-可选项

    04-条件语句

    05-循环

    06-字符串

    07-元组

    08-数组

    09-字典

    10-对象和类

    11-枚举

    12-属性

    13-下标脚本



    01-变量和常量

    1.1基本数据类型

    1.整数:Int

    2.浮点数: Double表示64位浮点数,Float表示32位浮点数

    3.布尔类型: Bool,布尔值只有 true 和 false 两种

    4.字符串: String

    5.字符: Character

    1.2变量和常量

    1.变量:值能被修改,var 修饰

    2.常量:值不能被修改,let 修饰

    var a =20

    a =10

    let b =20

    //b = 10常量不能修改:error:'b' is a 'let' constant

    1.会自动推导声明的变量或常量的属性

    2.使用【option + 单击】键查看属性的类型

    // 1.自动推导类型

    let str ="ningcol"

    let intValue =10

    let floatValue =1.2

    // 2.指定数据类型

    let doubleValue:Double =10

    02-运算符

    1基本运算符

    var a = 5

    let b = 3

    // 1.赋值运算符

    let c = b

    // 2.加减乘除

    1 + 2

    5 - 3

    2 * 3

    10.0 / 2.5

    2任何情况下都不会做隐式转化,必须以相同类型进行计算

    let num1 =1

    let num2 =2.2

    let num3 = Double(num1) + num2

    3必须要显式类型的转化

    let j =2.2

    let i:Float =1.2

    i + Float(j)

    4.求余运算

    a % b

    5负号运算

    let minusB = -b

    6.组合赋值运算

    a +=2

    7.比较运算

    1==1

    2!=1

    2>1

    1<2

    1>=1

    2<=1

    8.三目运算

    let d = a > b ?100:200

    9.空合运算

    1.空合运算符( a ?? b )将对可选类型 a 进行空判断(可选项内容详见:04-可选项)

    2.如果 aName 为 nil,则执行??后面的,否则执行aName(注意??两边都有空格)

    var aName: String? ="ningcol"

    //var aName: String? = nil

    let bName = aName ??"aNameIsNil"

    10.区间运算

    1.闭区间运算符( a...b )定义一个包含从 a 到 b (包括 a 和 b )的所有值的区间

    2.半开区间( a..

    for index in 1...5 {

    print(index)

    }

    for index in 1..<5 {

    print("半开区间:\(index)")

    }

    11.逻辑运算

    1.逻辑非(!a):布尔值取反

    2.逻辑与( a && b ):只有 a 和 b 的值都为 true 时,整个表达式的值才会是 true

    3.逻辑或( a || b ):两个逻辑表达式的其中一个为 tru e ,整个表达式就为 true

    let allowedEntry =false

    let enteredDoorCode =true

    if !allowedEntry {

    print("ACCESS DENIED")

    }

    if allowedEntry && enteredDoorCode {

    print("Welcome!")

    }else{

    print("ACCESS DENIED")

    }

    if allowedEntry || enteredDoorCode {

    print("Welcome!")

    }else{

    print("ACCESS DENIED")

    }

    03-可选项

    1.可选值

    可选值:可以有值,可以为nil(用 ? 表示可选值)

    // URL 为可选项

    let URL = NSURL(string:"http://www.baidu.com/")

    // str 为可选项

    var str: String? ="ningcol"

    // var 的可选项默认为 nil

    var a:Int?

    print(a)

    2 if let 语句
    // if let : 确保 myUrl 有值,才会进入分支

    iflet myUrl = URL{

    print(myUrl)

    }

    var aName: String? ="ningcol"

    // var aName: String? = nil

    var aAge: Int? =18

    iflet name = aName,let age = aAge {

    print(name + String(age))

    }

    // 可以对值进行修改

    ifvar name = aName,let age = aAge {

    name ="lisi"

    print(name + String(age))

    }

    3.guard let

    1.guard let 和 if let 相反。表示一定有值,没有就直接返回

    2.降低分支层次结构

    3.playground不能展示效果,要在函数中展示

    // 创建一个类(详见:10-对象和类)

    classtest{

    func demo(){

    let aNick: String? ="ningcol"

    let aAge: Int? =10

    guard let nick = aNick ,let age = aAgeelse{

    print("nil")

    return

    }

    print("guard let: "+ nick + String(age))

    }

    }

    var t = test()

    t.demo()

    4.强制解包

    // 创建一个数组(详见:08-组数)

    var dataList:[String]?

    dataList = ["zhangsan","lisi"]

    /*********************************************************************

    1.dataList? 表示 datalist 可能为 nil

    2.如果为 nil, .count 不会报错,仍然返回 nil

    2.如果不为 nil,.count执行,返回数组元素个数

    4. ?? 空合运算符(详见:02-运算符)

    *********************************************************************/

    let count = dataList?.count ??0

    // 表示 datalist 一定有值,否则会出错!

    let cou = dataList!.count

    04-条件语句

    4.1.if语句

    /*********************************************************************

    1.必须要有大括号

    2.没有"非零即真"的概念,只有ture/false

    *********************************************************************/

    let num =20

    ifnum >10{

    print("大于10");

    }else{

    print("小于或等于10")

    }

    4.2switch

    /*********************************************************************

    1.值可以是任何类型

    2.作用域仅在 case 内部

    3.不需要 break

    4.每一个 case 都要有代码

    *********************************************************************/

    let name ="nick"

    switchname {

    case"nick":

    let age =18

    print("one\(age)")

    case"fil":

    print("two")

    case"Davi":

    print("three")

    case"":break//相当于有一行代码

    case"tom","ningcol":

    print("tomAndNingcol")

    default:

    print("other")

    }

    switch分支使用范围

    let count = 3_000

    var naturalThings:String

    switchcount{

    case0:

    naturalThings ="数字0"

    case1...3:

    naturalThings ="数字1-3"

    case4...9:

    naturalThings ="数字4-9"

    case10...99:

    naturalThings ="数字10-99"

    case1000...9999:

    naturalThings ="数字1000-9999"

    default:

    naturalThings ="数字9999以上"

    }

    print(naturalThings);

    //输出:数字1000-9999

    5.1 for循环

    // 去掉了C语言风格的循环( ..< 区间运算符,详见:02-预算符)

    foriin0..<10{

    print(i)

    }

    print("----步长循环-----")

    // 递增(步数为2)

    foriinstride(from:0, to:12, by:2) {

    print(i)

    }

    print("开始递减")

    // 递减

    foriinstride(from:12, to:0, by: -2) {

    print(i)

    }

    print("----反序循环----")

    let range =0...10

    // 反序循环

    foriinrange.reversed(){

    print(i)

    }

    5.2循环结构while

    /*

    while语句,只有当 ip<5 为 false 才跳出 while语句

    */

    varip = 0

    while (ip<5){

    print("ip=\(ip)")

    ip += 1

    }

    //运行结果

    //ip=0

    //ip=1

    //ip=2

    //ip=3

    //ip=4

    /*

    repeat-while 循环,不管pa是多少,先执行一次,在判断,为false 跳出 do while语句

    */

    varpa = 5

    repeat{

    print("pa=\(pa)")

    pa += 1

    }while (pa<5)

    //运行结果

    //pa=5

    06-字符串

    1.String 结构体,效率比对象高,一般推荐使用,支持遍历

    2.NSString 继承NSObject

    var str:String ="Hello你好"

    //var st:NSString = "hah"

    // 字节数量

    print(str.lengthOfBytes(using: .utf8))

    // 字符串长度

    print(str.characters.count)

    forainstr.characters{

    print(a)

    }

    // 字符串拼接

    let name:String? ="老王"

    let age =80

    let location ="隔壁"

    print(location + (name ??"a") + String(age) +"岁")

    //'\(变量名)' 会自动转换拼接

    print("\(location)\(name)\(age)岁")

    let rect = CGRect(x:0, y:0, width:100, height:100)

    print("\(rect)")

    // 格式字符串

    let h =13

    let m =5

    let s =9

    let timeStr = String(format:"%02d:%02d:%02d", arguments: [h,m,s])

    let timeStr1 = String(format:"%02d:%02d:%02d", h,m,s)

    1.在Swift中使用 Range,最好把 String 改成 NSString

    2.str.substring(with: Range) 很麻烦

    3. '值 as 类型' 作为类型转换

    (str as NSString).substring(with: NSMakeRange(2,5))

    let index = str.index(str.startIndex, offsetBy:3)

    str.substring(from: index)

    // "123"只是用来取到索引位置

    str.substring(from:"123".endIndex)

    print("****\(str.substring(from: "123".endIndex))")

    str.substring(to: index)

    String 使用 Range

    let myRange = str.startIndex..

    str.substring(with: myRange)

    let myRange1 = index..

    str.substring(with: myRange1)

    07-元组

    // 元组的元素个数固定,不允许增加、删除

    var stu = (404,"小白")

    // 支持嵌套

    var msg = ("基本信息", ("李刚",34))

    print(stu)

    print(msg)

    var (a,b) = stu

    print(a,b)

    //如果仅需要元组中的个别的值,可以使用"_"的方式来处理不需要的值

    let (c,_) = stu

    print(c)

    //通过序号获得元组的值

    print("status is \(stu.0)")

    // 可以修改

    stu.0=500

    let message = (status:100, msg:"哈哈")

    print("message is \(message.status)and \(message.msg)")

    08-数组

    8.1 数组定义

    使用let修饰的数组是不可变数组

    使用var修饰的数组是可变数组

    //方括号 [] 来创建数组

    let array1 = ["zhangsan","lisi"]

    let array2 = [1,2,3,4,5]

    var array3:[Int]// 定义一个数组(没有初始化)

    array3 = [Int]()//初始化

    //声明空数组,(必须初始化)

    let array4 = [String]()// 等价上面两行代码

    let array5:[Any] = ["zhangsan","lisi",20]

    var arr3 = [Double](repeating:0.0, count:3)//[0.0, 0.0, 0.0]

    var arr4 = Array(repeating:3.0, count:3)//[3.0, 3.0, 3.0]

    var arr: [String] = ["Alex","Brian","Dave"]

    print(arr.count)

    print(arr[0])

    8.2数组遍历

    // forin方式

    for name in array1{

    print(name)

    }

    // 遍历数组

    for i in 0..

    print(array2[i])

    }

    //区间遍历

    for item in array2[0..<2] {

    print("item\(item)")

    }

    // 同时遍历下标和内容

    print("=====同时遍历下标和内容=====")

    for e in array2.enumerated(){

    print(e)

    //offset 下标element 值

    print("元组 \(e.offset) \(e.element)")

    }

    //下标和值同时遍历

    for(n, s) in array2.enumerated() {

    print(n,"===", s)

    }

    // 反序遍历

    for a in array2.reversed(){

    print(a)

    }

    // 遍历下标和数值 反序

    for(xxx,ooo)in array2.enumerated().reversed() {

    print(xxx,"==",ooo)

    }

    未完待续。。。

    如果你坚持看到这里就可以走向知识的大门 哈哈!!!

    http://www.cnblogs.com/ningmengcao-ios/p/5949790.html

    相关文章

      网友评论

        本文标题:swift基础学习Demo汇总

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