zoukankan      html  css  js  c++  java
  • Swift 2.0基本语法

    下面为一些swift 2.0 的基本语法,写在playground中,每次swift版本跟新的时候,打开瞅瞅,就可以对比出哪里发生了修改。

    内容包括:01变量&常量  02分支  03循环  04字符串  05数组  06字典  07函数

    01变量&常量

    //: Playground - noun: a place where people can play
    import UIKit
    
    var str = "Hello, playground"
    /*:
        let 常量
        var 变量
    
        * 自动`推导`,能够根据右边的代码,推导出变量的准确类型
    */
    
    let x = 100
    // 常量一旦设置数值,就不能再次修改
    //x = 300
    
    var y = 200
    y = 300
    
    print(x + y)
    
    /*:
        swift 对数据类型要求异常严格
    
        * 整数的默认类型是 Int(long 64位)
        * 小数的默认类型是 Double (OC 中使用比较多的是 CGFloat)
        * swift 中任何时候,都不会做 `隐式转换`,如果要对不同类型的数据进行计算,必须要自己转换
    */
    
    let i = 10
    let j = 8.5
    
    //let k = i + j
    let iNum = i + Int(j)
    let dNum = Double(i) + j
    
    let size = CGSizeMake(100, 100)
    let w = CGFloat(j) + size.width

    02分支

    //: Playground - noun: a place where people can play
    
    import UIKit
    
    var str = "Hello, playground"
    
    let i = 50
    
    /*:
        1. 条件不需要括号
        2. {} 不能省略
    */
    if i > 20 {
        print("OK")
    }
    
    /*:
        * OC 和 C 中非零即真
        * swift 中逻辑值只有两个 true / false
    */
    if i == 50 {
        print("OK")
    }
    
    // 三目,语法和 OC 基本一样
    let b = i < 20 ? 10 : 80
    
    /**
        可选项(Optional) ?
        表示变量可以有值,也可以没有值
    
        * convenience init? 构造函数,? 表示不一定能够实例化出对象
    
        * `!` 表示程序员告诉编译器对象一定有值,编译能够通过
        * 如果运行时,没有值,就`崩溃`
    */
    
    let url = NSURL(string: "http://www.baidu.com")
    //如果不确定url 真的有值,增加一个 if
    if url != nil {
        let request = NSURLRequest(URL: url!)
    }
    
    print(url)
    
    // 判断对象是否有值 - 增加了 if ,能够保证进入 {} 代码,url1 一定有值的
    if let url1 = NSURL(string: "http://www.baidu.com/s?wd=zhang") {
        let request = NSURLRequest(URL: url1)
    }

    03循环

    //: Playground - noun: a place where people can play
    
    import UIKit
    
    for var i = 0; i < 10; i++ {
        print(i)
    }
    
    /*:
        swift
        * 0~9 其中 0..<10 不能有空格
    */
    for i in 0..<10 {
        print(i)
    }
    
    // 0~10
    for i in 0...10 {
        print(i)
    }
    
    // 不关心下标,可以使用 _ 省略
    for _ in 0..<10 {
        print("hello world")
    }

    04字符串

    //: Playground - noun: a place where people can play
    
    import UIKit
    
    /*:
        Swift 中使用 String 是一个结构体,效率会高,支持遍历
        OC 的 NSString,是一个对象
    
        * Swift 中,String 和 NSString 之间的转换很容易
    */
    
    var str = "我要飞的更高"
    
    
    // swift 2.0 中遍历字符
    for c in str.characters {
        print(c)
    }
    
    // 字符串拼接
    let i = 1
    let rect = CGRectMake(0, 0, 100, 100)
    str = str + "(i)" + "(rect)"
    
    // 拼接字符串的时候,一定记住如果是可选项,要特别注意,带上 Optional
    var x: Int?
    x = 10
    let str1 = "(x!)"
    
    // 格式
    let frmString = String(format: "%02d:%02d:%02d", arguments: [11, 1, 59])
    
    /*:
        如果使用 Range 的时候,最好用 NSString
    */
    // 跟原来的字符串一模一样
    var subStr = str.substringWithRange(Range<String.Index>(start: str.startIndex, end: str.endIndex))
    print(subStr)
    
    // 从哪里开始,到哪里结束
    subStr = str.substringWithRange(Range<String.Index>(start: advance(str.startIndex, 3), end: advance(str.startIndex, 6)))
    print(subStr)
    
    let myStr: NSString = str
    let myStr1 = str as NSString
    
    myStr.substringWithRange(NSMakeRange(0, 3))

    05数组

    import UIKit
    
    var str = "Hello, playground"
    
    /*:
        数组定义 []
    */
    
    let array = ["zhangsan", "lisi"]
    
    // 遍历
    for str in array {
        print(str)
    }
    
    print(array[0])
    print(array[1])
    
    // 不能向不可变数组添加内容
    //array.append("wangwu")
    
    /*:
        可变 var 和 不可变 let
    
        * OC 中的数组,可以存放任意类型的对象
    */
    // array1 的类型 [String],自动推导,只允许存放字符串
    var array1 = ["xiaohua", "xiaocao"];
    // array2 的类型 [NSObject],可以存放`任意对象`
    // 在 swift 中,数字也可以直接当成对象存放在数组,不需要`转换`
    var array2 = ["xiaohua", "xiaocao", 123];
    array1.append("laozhang")
    array2.append(100)
    
    /*:
        数组的定义
    */
    // array3 是一个仅允许存放字符串的数组,定义类型
    var array3: [String]
    
    // 对 array3 进行实例化,在此之前,不允许操作
    array3 = [String]()
    
    array3.append("laowang")
    
    // 数组的合并
    array3 += array1
    
    // 必须是相同类型的才能够合并
    // 提示:在 swift 开发中,通常数组中保存的对象类型,都是一样的!
    //array3 += array2
    
    // 数组的删除
    array3.removeAtIndex(2)
    array3
    
    array3 += array1
    print(array3.count)
    
    // 清空数组 keepCapacity 是否保持容量
    array3.removeAll(keepCapacity: false)
    
    // 添加内容 
    // 如果向数组中追加元素,超过了容量,会直接在现有容量基础上 * 2
    // OC 实例化可变数组,最好指定容量
    for i in 0..<16 {
        array3.append("hello - (i)")
        print(array3[i])
        print(array3.capacity)
        
    }

    06字典

    //: Playground - noun: a place where people can play
    
    import UIKit
    
    var str = "Hello, playground"
    
    /*:
        定义字典 []
    
        let 不可变
        var 可变
    */
    // [String : NSObject] - 类型最常见
    // JSON 的数据格式,key 是 String
    // [key: value]
    var dict = ["name": "张三", "age": 18]
    dict
    
    // 如果 key 不存在,会新建
    dict["title"] = "boss"
    dict
    // 如果 key 存在,会覆盖
    dict["name"] = "lisi"
    dict
    
    /*:
        字典的遍历
    
        k, v 可以随便写,前面是 key,后面是 value
    */
    for (vv, kk) in dict {
        print(vv + "--- (kk)")
    }
    
    /*:
        合并字典
    */
    // 1. 定义字典
    var dict1: [String: NSObject]
    dict1 = [String: NSObject]()
    dict1["nickname"] = "老王"
    dict1["age"] = 80
    
    // 2. 合并-如果存在会覆盖,如果没有会新建
    for (k, v) in dict1 {
        dict[k] = v
    }
    
    dict

    07函数

    import UIKit
    
    var str = "Hello, playground"
    
    //参数及返回值,取消了1.2中的#
    func sum(num1 a: Int, num2 b: Int) -> Int{
        return a+b
    }
    
    sum(num1: 10, num2: 20)
    
    func prinnnnt(printtt a: Int) -> Void {
        print(a)
    }
    
    prinnnnt(printtt: 10)
  • 相关阅读:
    Netty源码解析与实战
    什么是序列化id?
    关于idea下tomcat输出日志的问题
    利用jstack 找到异常代码
    mysql 异常 Lock wait timeout exceeded; try restarting transaction;expc=java.sql.SQLExcept
    Spark-Hadoop、Hive、Spark 之间是什么关系?(转)
    转(数据分析的意义)
    按位取反~100=-101
    知识总汇
    前端(以Vue为例)webpack打包后dist文件包如何部署到django后台中
  • 原文地址:https://www.cnblogs.com/alwaysDB/p/4593882.html
Copyright © 2011-2022 走看看