美文网首页
Swift语法记录

Swift语法记录

作者: figure_ai | 来源:发表于2016-12-27 22:15 被阅读0次

    1.常量和变量

    let:修饰常量;
    var:修饰变量;

    • 注:
      在开发中一般优先使用常量let修饰,只有在需要修改时,再把let改为var(这样做可以使得数据更加安全)
    let pi : Double = 3.14
    var age : Int = 20
    
    • 附:
      常量的意思是:指向的对象指针不可修改,但是可以通过指针拿到对象,然后修改内部属性。

    2.类型推导和基本运算

    2.1类型推导

    释义:如果一个标识符在定义时有直接复制,那么可以根据后面赋值的类型,来推导前面标识符的类型,这样可以不用声明数据类型。(注:可以通过option+鼠标左键,来查看标识符的类型)

    var a = 20
    var b = 3.14
    

    2.2基本运算

    注:在swift中进行运算,必须保证类型时一致的,因为Swift中没有隐式运算。

    var a = 20
    var b = 3.14
    //将Double类型转化成Int类型
    let c = Int(b) + a
    //将Int类型转化成Double类型
    var d = Double(a) + b
    

    3.if、三目运算符、和guard的使用

    3.1 if的使用

    注:if 判断条件可以不用加();但判断句结果必须是一个真假值

    let a = 20
    //let flag = a < 10
    //示例1
    if a > 10{
        print("a大于10")
    }else{
        print("a小于10")
    }
    //示例二
    let score = 87
    if score < 60{
        print("不及格")
    }else if score < 70{
        print("及格")
    }else if score < 90{
        print("良好")
    }else if score <= 100{
        print("优秀")
    }else{
        print("其他")
    }
    

    3.2 三目运算符

    let age = 20
    let result = age >= 18 ?"可以上网" : "不可以上网"
    print(result)
    //如果条件为真打印:可以上网;如果条件为假打印:不可以上网
    

    3.3 guard的使用

    guard age >= 18 else
    {
      //如果判断句为假,会执行else里边的语句
    print("不能上网")
    return false
    }
    //如果为真,继续执行
    print("可以上网")
    return true
    

    4.Switch的使用

    总结:

    1. 有case穿透,可以在语句后加fallthrough
    //示例1:简单使用
    let sex = 0
    switch sex{
    case 0:
          print("男")
    case 1:
          print("女")  
    default:
          print("其他")
    }
    //示例2:有case穿透时,可以在语句后加**fallthrough**
    switch sex{
    case 0:
          print("boy")
          fallthrough
    case 1:
          print("girl")
    default:
          print("other")
    }
    //示例3:case中可以通过“,”分割来实现判断多个条件
    switch sex{
    case 0,1:
          print("human")
    default:
          print("other")
    }
    //示例4:判断浮点型数据
    let a = 3.14
    switch a{
    case 3.14:
          print("pi")
    default:
          print("other")  
    }
    //示例5:判断字符串
    let m = 20
    let n = 2
    let operation = ""
    var result : Int
    switch operation{
    case "+"
          result = m + n 
    case "-"
          result = m - n
    case "*"
          result = m * n
    case "/"
          result = m / n
    default:
          print("非法输入")
    }
    //示例6:判断区间
    let score = 80
    switch score{
    case 0..<60:
          print("不及格")
    case 60..<70:
          print("及格")
    case 70..<90
          print("良好")
    case 90..<100:
          print("优秀")
    default:
          print("不合理的分数")
    }
    

    5.for、while、doWhile的使用

    5.1 for循环

    //写法一:常规写法
    for var i = 0; i < 10; i++
    {
    print(i)
    }
    //写法二:区间for循环
    for i in 0...10
    {
    print(i)
    }
    //写法三:如果for循环中没有用到"i"可以用"_"代替
    for _ in 0..<10
    {
    print("hello world")
    }

    
    5.2  **while循环**
    >注:条件不需要写()
    判断条件必须有真假值(Bool)
    

    var a = 10
    while a < 20
    {
    a++
    print("111")
    }

    
    5.3 **doWhile 循环**
    >注:doWhile循环在swift 中,do需要换成“repeat”代替
    

    repeat
    {
    a++
    print("222")
    }while a < 30

    ####6. 字符串Stirng的相关操作
    

    /************1. Stirng的遍历****************/
    //关键属性:str.characters
    let str = "Hello Swift"
    for s in str.characters{
    print(s)
    }
    /************2. String 的拼接****************/
    //1.两个字符串之间的拼接
    let str1 = "Hello "
    var str2 = "Swift"
    str2 = str1 + str2
    //2. 字符串和其他类型的变量常量的拼接
    //格式:(变量/常量名)
    let age = 19
    let height = 1.34
    let str3 = "age is (age), height is (height)"
    //3. 字符串的格式化
    //关键方法:String(format: ,arguments:)
    let min = 2
    let second = 32
    let time = String(format:"%02d:%02d",arguments:[min,second])
    /***************3. String的截取***************/
    //提示:不要使用string方法截取.index因为非常不好截取
    let urlString = "www.520it.com"
    //string 转成NSString,只需要在String后面跟上:as NSString
    //从其实位置截取index个长度
    let prefixString = (urlString as NSString).substringToIndex(3)
    //从location位置开始截取length个字符
    let middelString = (urlString as NSString).substringWithRange(NSRange(location: 4, length: 5))
    //从某位置截取到结尾
    let subfixString = (urlString as NSString).substringFromIndex(10)

    
    ####7.数组的初始化
    >注:
    - 可变数组:var修饰
    - 不可变数组:let修饰
    

    /***********不可变数组*************/
    //定义写法一:
    let names : Array<String> = ["why", "what", "when", "how"]
    //取出数组中的元素
    names[1]
    //定义写法二:常用
    let names : [String] = ["lch", "zjq", "fhq"]
    //定义写法三:类型推导
    let names2 = ["why", "hh", "asdf"]
    //可变数组:
    //定义写法一:
    var names3:[String] = ["why", "yz"]
    //添加元素
    names3.append("lch")
    //定义写法二:
    var names4 : [String] = String
    names4.append("whld")

    
    ####8. 数组的相关操作
    ```//定义可变数组
    //Swift 开发中,可以使用AnyObject代替NSObject
    var names : [AnyObject] = [AnyObject]()
    /********************1. 对数组的基本操作**********************/
    //1. 添加元素
    names.append("why")
    names.append("Imsa")
    names.append(14)
    names.append(3.283)
    names.append("why")
    names.append(14)
    names.append(3.214)
    
    //2. 删除元素
    names.removeLast()
    names.removeFirst()
    names.removeAtIndex(0)
    names
    
    //3. 修改元素
    names[0] = "sd"
    names
    
    //4. 取出数组中的值
    names[0]
    
    //2. 数组的遍历
    //1. 通过下标值遍历
    for i in 0..<names.count{
        print(names[i])
    }
    //2.forIn方式
    for item in names{
        print(item)
    }
    //3. 区间遍历
    for i in 0..<2{
        print(names[i])
    }
    for item in names[1..<3]{
        print(item)
    }
    
    //数组的合并
    //1. 类型相同数组的合并
    let array1 = ["why", "sdfaew", 20]
    let array2 = ["sdf", "dds", 8]
    let array3 = array1 + array2
    //2. 类型不同的数组的合并
    let age1 = [18, 10, 35]
    let names2 = ["sde", "ed", "aed"]
    var array4 : [AnyObject] = [AnyObject]()
    

    9. 字典的初始化

    /*************1. 不可变字典****************/
    //1. 方式一:
    let dict1 : Dictionary<String, AnyObject> = ["name" : "hh", "age" : 123]
    //2. 方式二:常用
    let dict2 : [String : AnyObject] = ["name" : "wef", "age" : 21]
    //3.方式三
    let dict3 : ["name" : "sad", "age" : 23]
    
    /**************2.可变字典******************/
    //方式一: 
    var dict4 = Dictionary<String, AnyObject>()
    //方式二:
    var dict5 = [String : AnyObject]()
    //方式三:
    var dict6 = ["name" : "fdgc", "age" : 09]
    

    10. 字典的操作

    10.1 字典基本操作

    //1. 添加元素
    dict["name"] = "sld"
    dict["age"] = 32
    dict["height"] = 1.32
    dict["weight"] = 76
    
    //2. 删除元素
    dict.removeValueForKey("age")
    dict.removeAll()
    
    //3. 修改元素
    dict["name"] = "lch"
    dict
    
    //4. 取出元素
    dict["name"]
    
    //1. 遍历字典的键
    for key in dict.keys {
        print(key)
    }
    //2. 遍历字典的值
    for value in dict.values {
        print(value)
    }
    //3. 遍历字典的键值对
    for (key, value) in dict {
        print(key)
        print(value)
    }
    
    //字典的合并
    //注意:字典无论类型是否一致,都不能通过直接直接相加来合并
    let dict1 = ["name" : "sdl"]
    var dict2 : [String : AnyObject] = ["age" : 23]
    for (key, value) in dict {
        dict2[key] = value
    }
    

    11. 元组的使用

    /**************定义元组****************/
    //方式一:
    let a = ("why", 24, 1.35)
    //方式二:
    let b = (name : "sldh", age : 34)
    //方式三:
    let(name, age) = ("sd", 98)
    
    /************元组的使用************/
    let error = (404, "Not Found")
    error.0
    error.1
    
    let error1 = (errorCode : 404, errorInfo : "Not Found")
    error1.errorCode
    error1.errorInfo
    
    let (errorCode1, errorInfo1) = (404, "Not Found")
    errorCode1
    errorInfo1
    

    12. 可选类型

    注:如果一个可选类型中没有值,强制解包会报错,所以在强制解包前最好先进行判断是否有值,如果有值再进行解包

    //定义方式一:
    var name : Optional<String>
    //给可选类型赋值
    name = "wld"
    //取值: 可选类型名+!;表示强制解包
    print(name!)
    //拼接
    let info = "my name is" + name!
    
    //定义方式二:String?
    //let phoneNum : Optional<String>
    var phoneNum : String? = nil
    phoneNum = "+86110"
    gurard phoneNum else {
        print("该值为空")
        return false
    }
    let phoneInfo = "my phoneNum is " + phoneNum!
    

    13.throw的三种方式

    • try?

    如果解析成功有值,否则返回nil

                guard let result: [String: Any] = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: Any]
                    else {
                    return
                }
    
    • try!

    如果解析成功有值,否则崩溃

                let result: [String: Any] = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: Any]
    
    • do{}catch{}

    处理异常,能够接受到错误,并且输出错误,语法结构较复杂

    do {
                    let result: [String: Any] = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: Any]
                    print(result)
                } catch {
                    print(error)
                }
    

    14闭包

    //声明格式
    var name: ((参数) -> (返回值))= {代码}
    //实现格式

          代码
    }  ```
    **示例**
    

    //声明一个闭包
    var callBack: (() -> ())? = nil
    //闭包作为函数参数
    class func requestData(urlString:String, successBack: (Any)->(), errorBack: @escaping(Any)->()) {
    //代码
    }
    //实现闭包
    _ = HttpTool.requestData(urlString: url, successBack: { (resultData) in
    CHLog(message: resultData)
    }, errorBack: { (error) in
    CHLog(message: error)
    })

    相关文章

      网友评论

          本文标题:Swift语法记录

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