日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

swift 2.2 语法 (上)

發布時間:2025/3/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 swift 2.2 语法 (上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:
1.此文中的語法會根據Swift的升級變動而更新。
2.如果需要請移步 -> swift2.2 語法(中)、swift 2.2語法(下)

Swift與OC中常見的區別

  • 導入框架
    • OC:

      #import <UIKit>#import "AFNetWorking.h"
    • Swift:

      import UIKit
  • 定義標識符

    • OC:

      int i = 0;
    • Swift:

      // 不可變標識符let i = 0 或 let i : Int = 0// 可變標識符var i = 0 或 var i : Int = 0
  • ";"號的使用
    • OC:每個語句后都必須加上;以示結尾
    • Swift:

      1.如果在一行中只有一條語句,那么語句結束時 ";" 號可以省略

      2.如果一行中有多條,那么需要以 ";" 進行分割

常量和變量

  • 在定義一個標識符時,必須明確告訴編譯器這個標識符是變量還是常量
  • 常量,需要在定義最前面加上 'let',定義后不可修改
  • 變量,需要在定義最前面加上 'var',定義后可以修改
    • 格式:let/var 標識符名稱 : 類型 = 10;


import UIKit// 定義一個常量let a : Int = 0 // 或 let a = 0// 因為常量不可修改,所以 a = 1 的是錯誤的寫法// 定義一個變量var b : Int = 0 // 或 var b = 0// 因為變量可以修改,所以來修改下變量b = 1
  • 常量使用注意
    • 在開發中優先使用常量,只有發現該標識符需要修改時,再改成變量(保證數據更加安全)
    • 常量本質:指向的內存地址不可修改,但通過內存地址找到對應的對象,就可以修改對象內部屬性


    // 創建一個常量指向UIView并修改內部屬性 let view : UIView = UIView() // 設置尺寸 view.frame = CGRectMake(0, 0, 150, 150) // 設置背景顏色= UIColor.greenColor()// 定義一個常量保存尺寸信息 let rect = CGRectMake(0, 0, 150, 150) // 定義一個變量指向UIView并切換到UIButton var tempView : UIView = UIView(frame: rect) // 設置背景顏色 tempView.backgroundColor = UIColor.redColor() // 切換變量指向的View tempView = UIButton(type: .Custom)

swift中數據類型

  • 介紹
    • Swift中的數據類型也有:整型/浮點型/對象類型/結構體類型等
      • 整型
        • 有符號
          • Int8 : 有符號8位整型
          • Int16 : 有符號16位整型
          • Int32 : 有符號32位整型
          • Int64 : 有符號64位整型
          • Int : 和平臺相關(默認,相當于OC的NSInteger)
        • 無符號
          • UInt8 : 無符號8位整型
          • UInt16 : 無符號16位整型
          • UInt32 : 無符號32位整型
          • UInt64 : 無符號64位整型
          • UInt : 和平臺相關(常用,相當于OC的NSUInteger)(默認)
        • 浮點型
          • Float : 32位浮點型
          • Double : 64浮點型(默認)

類型推導

  • Swift是強類型語言
  • Swift中任何一個標識符都有明確的類型
  • 注意:
    • Swift中在定義一個標識符時,有直接給該標識符進行賦值,那么標識符后面的類型可以省略(因為類型推導會自動根據后面賦值的類型推導出前面標識符的類型)
    • 在Swift中可以通過option + 鼠標左鍵,可以查看某個標識符的類型


// 定義一個Int類型的常量 let a : Int = 15 // 因為有類型推導的特性,所以上面的語句可以簡寫為 let a = 15 // 編譯器會自動根據右邊值得類型判定數據類型// 定義一個浮點類型的常量 let b : Double = 3.14 // 因為有類型推導的特性,所以上面的語句可以簡寫為 let b = 3.14 // 因為右邊是浮點型數據,所以編譯器會判定常量類型為浮點型

基本運算

  • 在Swift中,不同類型的數據類型之間不能進行運算(因為Swift中沒有隱式轉換)
  • 如果數據類型不一致,就需要轉化數據類型,使類型一致


// 相同類型運算 let a = 15 let b = 20 // 求和 let sum = a + b// 不同類型運算 let a = 30.0 let b = 15 // 轉換類型 let tempA = Int(a) // 求和 let sum = tempA + b

判斷分支

  • 介紹
    • 判斷分支指if/switch/三目運算符等判斷語句
    • 通過判斷分支可以控制程序的執行順序
  • if判斷
    • if后面的()可以省略掉
    • 在Swift中,判斷語句必須有明確的真假
      • if后面的判斷句沒有非0(nil)即真概念
      • if后面的判斷句必須明確真假(Bool) --> true/false


      let a = 15if a > 11{print(a) }// 因為Swift中,只有聲明成可選類型,才能判斷是否為空 let view : UIView? = UIView()if view != nil {view!.backgroundColor = UIColor.blueColor()}
  • 三目運算符(和OC一樣,沒有別的區別)


let a = 15 let b = 20var result = a > b ? a : bprint(result)
  • guard(守衛)使用
    • guard是Swift2.0新增的語法
    • 它與if語句非常類似,設計的目的是提高程序的可讀性
    • guard語句必須跟上else,{}內必須跟上break/continue/return


/* 假設成績為100分,60以下為不及格 */// 定義一個常量 let a = 99// 定義一個test函數,參數Int類型 func test(a : Int) {guard a >= 60 else {print("不及格")return}print("優秀") }// 調用函數 test(a)
  • switch判斷
    • 介紹
      • 蘋果對Switch進行了大大的增強,使其擁有其他語言沒有的特性
    • 使用
      • 基本用法和OC一樣
      • switch后面的()可以省略
      • case后的break可以省略(默認會自動填補break)


    let a = 0switch a { case 0 :print("真") case 1 :print("假") default :print("其它") }
    • 一個case判斷中,可以判斷多個值(值之間用 “,” 分隔)


    let a = 0switch a { case 0, 1 :print("真假") default :print("其它") }
    • 如果希望出現case穿透,可以使用關鍵字fallthrough


    let a = 0switch a { case 0 :fallthrough case 1 :print("假") default :print("其它") }
    • switch支持多種數據類型(包含浮點型、字符串類型)
    • switch支持區間判斷
      • 常見的區間

        1.半開半閉區間:0..<10(表示0~9)

        2.閉區間:0...10(表示0~10)


      /* 假設成績為100分 */let a = 88switch a {case 0..<60:print("不及格") case 60..<80:print("幾個") case 80..<90:print("良好") case 90..<100:print("優秀") default:print("滿分")}

循環

  • 循環是開發中必不可少的,常見循環有:for/while/do...while
    • for循環
      • for后面的()可以省略


    // 傳統寫法 for var i = 0; i < 15; i++ {print(i) }// 區間循環 for i in 0..<15 {print(i) }for i in 0...15 {print(i) }// 特殊寫法 // 有時候我們只需要循環語句內的操作,不需要i,那么i可以用_代替 for _ in 0..<15 {print("hello world") }
    • while循環
      • while的判斷句必須有真假(沒有非0即真概念)
      • while后面的()可以省略


    var a = 0while a < 10 {a++ }
    • do...while循環
      • 使用repeat關鍵字代替了do


    let a = 0 repeat {print(a)a++ } while a < 20

字符串

  • OC和swift中字符串的區別
    • OC中字符串類型為NSString,在swift中字符串類型為String
    • OC中字符串用@“”包裝,swift中字符串用“”包裝
  • 使用String原因
    • String是一個結構體,性能較高;NSString是一個OC對象,性能較差
    • String支持直接遍歷
    • swift提供了String和NSString間無縫轉換
  • 定義

    • 不可變字符串


    let str = "hello world"
    • 可變字符串


    var str = "hello world"
  • 使用
    • 獲取字符串長度


    let count = str.characters.count
    • 遍歷字符串


    var str = "hello world"for tmp in str.characters {}
    • 字符串拼接


    let str1 = "hello" let str2 = "world" let str = str1 + str2
    • 字符串和其它數據類型拼接


    let str1 = "xiao ming" let str2 = 23let str = "\(str1)今年\(str2)歲"
    • 字符串的格式化
      • 如:時間


      let min = 3let time = String(format:"%02d", arguments:[min])
    • 字符串截取方式
      • 常用方式:String轉換成NSString后再截取(簡便)


      let myStr = "hello world" var subStr = (myStr as NSString).substringFromIndex(4) subStr = (myStr as NSString).substringToIndex(3) subStr = (myStr as NSString).substringWithRange(NSRange(location: 4, length: 5))
      • 方式二:使用swift原生截取方式


      // 定義一個String類型的常量str let str : String = "http://blog.csdn.net/yeshaojian"// 截取開始位置 let startIndex = str.startIndex.advancedBy(7) let head = str.substringFromIndex(startIndex)// 截取結束位置 let endIndex = str.endIndex.advancedBy(-11) let foot = str.substringToIndex(endIndex)// 截取中間網址 let range = Range(start: startIndex, end: endIndex) let middle = str.substringWithRange(range)

數組

  • 介紹
    • 數組(Array)是一串有序的由相同類型元素構成的集合
    • 數組中的集合元素是有序的,可以重復出現
    • swift中的數組
      • swift數組是一個泛型集合,類型是Array,
  • 初始化數組
    • 數組分為可變數組和不可變數組
      • 使用let修飾的數組是不可變數組
      • 使用var修飾的數組是可變數組


      // 在swift中任意類型一般不用NSObject而會使用AnyObject // 定義一個不可變數組(存儲內容為AnyObject) let array : [AnyObject] = ["123", 15, ["se"]]// 定義一個可變數組,并初始化值 var arrayM : [String] = [String]()

      注意:在swift中任意類型一般不用NSObject而會使用AnyObject

    • 聲明數組的簡便寫法


    // 聲明可變數組 var arrayM2 : Array<String> // 或 var arrayM3 : [String]// 聲明不可變數組 let array1 : Array<AnyObject> let array2 : [AnyObject]

    注意:聲明的數組需要初始化才能使用,數組類型一般都是在聲明的同時進行初始化

    • 對聲明的數組進行初始化


    // 初始化值 arrayM2 = ["1", "2", "3"] // 初識化后可追加值 arrayM2.append("隔壁老王")// 因為上面我們聲明的array1是let(常量),所以初始化后不能追加元素(不能使用append追加元素) array1 = ["se", 234]
    • 數組的增、刪、改、查

    // 定義一個可變數組 var arrayM : [AnyObject] = ["123", 15, 25, 35]// 添加數據 arrayM.append("隔壁老王")// 取值 arrayM[4]// 修改元素 arrayM[0] = "12"// 刪除數組最前面的元素(這邊填 2 就表示刪除2次,所以執行完畢后 隔壁老李 和 "123" 會被刪除) arrayM.removeFirst(2)// 刪除數組最后面的元素 arrayM.removeLast()// 刪除指定下標的元素(0 表示刪除第一個元素) arrayM.removeAtIndex(0)// 刪除所有元素 arrayM.removeAll()
    • 數組的遍歷
    // 定義一個可變數組 var arrayM : [AnyObject] = ["123", 15, 25, 35, "隔壁老王"]// 方式一:遍歷數組下標 for i in 0..<arrayM.count {print(i) }// 方式二:遍歷數組內容 for name in arrayM {print(name) }// 方式三:設置數組遍歷區間 for name in arrayM[0..<3] {print(name) }// 方式四(常用)遍歷數組同時獲取下標 for (i, name) in arrayM.enumerate() {print("\(i)--\(name)") }
    • 數組合并
    // 相同類型的數組才能合并 let array1 = ["123", "157", "12345", "234567", "15689123"] let array2 = ["1568648", "26879435", "1578715645"]let array3 = array1 + array2// 一個數組最好不要存放多種類型數據 var arrayM1 = ["mms", 56, "隔壁老王", 37, "15689123"] var arrayM2 = [12, "哈哈哈哈", "1578715645"]var arrayM3 = arrayM1 + arrayM2

    注意:只有相同類型的數組才能合并


字典

  • 介紹
    • 字典由鍵(key)集合和值(value)集合兩部分構成
    • 鍵集合不能有重復元素,而值集合可以重復,每一個鍵對應一個值
    • 字典可以按照某個鍵來訪問對應的元素
    • swift字典類型為Dictionary,和數組一樣死個`泛型集合``
  • 初始化字典
    • swift的字典分為可變和不可變字典2種
      • 使用let修飾的字典是不可變字典
      • 使用var修飾的字典是可變字典


      // 定義一個不可變字典 let dict = ["name" : "laoWang", "city" : "隔壁", "age" : 35]// 定義一個 var dictM : [String : AnyObject] = [String : AnyObject]() 注意:在swift中任意類型一般不用NSObject而會使用AnyObject
    • 聲明字典


    // 聲明不可變字典 let dict1 : [Int : AnyObject] let dict2 : Dictionary<Int, AnyObject>// 聲明可變字典 var dictM1 : [Int : AnyObject] var dictM2 : Dictionary<Int, AnyObject>

    注意:和數組一樣,聲明的字典也需要初始化值后才可使用

    • 聲明的字典需要初始化才能使用,字典類型一般是在聲明的同時進行初始化


    // 初始化不可變字典值 dict1 = [0 : "aa", 1 : "bb", 2 : "cc"] dict2 = ["name" : "laoWang", "age" : 35]// 初始化可變字典值 dictM1 = ["name" : "laoWang", "age" : 35] dictM2 = [0 : "aa", 1 : "bb", 2 : "cc"]
    • 字典的增刪改查
    // 添加Key為city value為gebi dictM1["city"] = "gebi"// 修改 dictM1["name"] = "laoLi"// 查詢 dictM1["name"]// 刪除 dictM1.removeValueForKey("city")// 刪除所有元素 dictM1.removeAll()
    • 字典遍歷


    // 方式一:遍歷字典內所有值 for value in dictM1.values {print(value) }// 方式二:遍歷字典中所有的鍵 for key in dictM1.keys {print(key) }// 方式三:遍歷字典中鍵和值 for (key, value) in dictM1 {print("\(key) : \(value)") }
    • 字典合并


    // 字典合并 // 只有字典內容類型相同的字典才可合并 // 定義一個不可變字典(key:String類型 value:AnyObject類型) let dict1 : [String : AnyObject] = ["name" : "laoWang", "age" : 35] // 定義一個可變字典(key:String類型 value:AnyObject類型) var dictM2 : Dictionary<String, AnyObject> = ["city" : "gebi"]// 遍歷dict1的key和value并合并(添加)到dictM2字典中 for (key, value) in dict1 {dictM2[key] = value }print(dictM2)

    注意:只有字典內容類型相同的字典才可合并

元組

  • 元組是Swift中特有的,OC中并沒有相關類型
    • 元組是一種數據結構,類似于數組或者字典
    • 可以用于定義一組數據
    • 多個值組合而成的復合值。元組中的值可以是任意類型,而且每一個元素的類型可以不同
    • 組成元組類型的數據稱為“元素”
  • 定義元組


    // 方法一:基本寫法(格式:(元素,元素) 數據類型不限) let personInfo1 = ("老王", 35, 1.80, "laoWang")// 方法二:在上面方法的基礎給元素定義名稱 let personInfo2 = (name:"老王", age:35, height:1.80, EnglishName:"laoWang")// 方法三:先定義元素名,在設置值 let (name, age, height, EnglishName) = ("老王", 35, 1.80, "laoWang")// 方法四:明確有幾個元素并且確定類型 var personInfo3 : (Int, String) = (0, "老王")
  • 元組操作


    // 通過下標或者別名讀取值 personInfo1.0personInfo2.namename

可選類型

  • 可選類型作用:
    • 在OC中,如果一個變量暫停不適用,可以賦值為0(基本屬性類型)或賦值為空(對象類型)
    • 在swift中,nil被定義為一個特殊的類型,因為和真是的類型不匹配是不能賦值的(強類型語言特性)
    • 為了在開發中賦值為nil,畢竟很經常用到,所以推出了可選類型
    • 可選類型的取值為:
      • 空值
      • 有值
  • 可選類型定義
    • 基本寫法(不常用)


    // 基本寫法 let user : Optional<String> = nil
    • 糖語法(推薦)


    // 糖語法 let user : String? = nil
  • 可選類型簡單使用
// 可選類型使用 var user : String? = nil// 給可選類型賦值(我們上面定義的可選類型為String類型,所以只能給他賦值String類型) user = "laoWang"// 可選類型取值(在可選類型內,只能通過強制解包來取出可選類型的真實類型) // 強制解包方式一: user!// 需要注意的是,如果可選類型為nil(為空),強制取出其中的值(強制解包),會出錯 // 強制解包方式二: if user != nil {print (user!) }// 為了在if語句里面方便使用user,我們可以定義一個可選綁定類型,這樣也能達到嚴謹取值的效果(底層也是幫我們進行判斷,有值就會解包) if let userStr = user {print (userStr) }

注意:

1.如果可選類型為nil(為空),強制取出其中的值(強制解包),會出錯,所以解包前需要進行判斷
2.為了使用方便,解包會以可選綁定的形式實現

  • 可選類型重要性(讓代碼邏輯更加嚴謹)
// OC中,我們在定義一個包含中文的NSURL的時候是這樣的 NSString *urlStr = @"http://www.xxxxx.com/中文/sie";// 因為字符串中包含中文,所以需要對字符串進行UTF8編碼轉換,防止出現訪問錯誤 NSString *str = [urlStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];// 再將其包裝成NSURL NSURL *url = [NSURL URLWithString:str];// 在swift中,如果字符串中包含中文,且我們沒有對其進行處理,那么就會直接返回nil // 也就是說,url可能有值也可能沒值,這時候就需要用可選類型來接收 // 方法一:標準寫法 let url : NSURL? = NSURL(string: "http://www.xxxxx.com/中文/sie") // 方法二:利用類型推導 let url2 = NSURL(string: "http://www.xxxxx.com/中文/sie") // 方法三:可選綁定 if let temp = url {let request = NSURLRequest(URL: temp)print (request) }

類型轉化

  • 類型轉化符號
    • as:將示例轉成某一類型
      • as?:判斷是否有值,有則轉換,沒有則不轉換(推薦)
      • as!:不判斷是否有值,直接轉換(不安全)
    • is:用來判斷一個示例是否是某一種類型


    // 定義一個數組 let array : [AnyObject] = ["laoWang", 15, 18.9]// 取出數組中的第二個元素 let temp = array[1]// 判斷第一個元素類型是否為字符串 if temp is String {print("true") } else {print("flase") }// 將objc轉成真實類型 // 方式一:使用as?將AnyObject轉成可選類型,通過判斷可選類型是否有值,來決定是否轉換成功 let age = temp as? Int print(age)// 方式二:使用as!將AnyObject轉成真實類型,因為objc的真實類型為Int不是String,通過as!進行轉換后,會直接報錯 let age1 = temp as! String print(age1)

轉載于:https://www.cnblogs.com/miaomiaoshen/p/5496036.html

總結

以上是生活随笔為你收集整理的swift 2.2 语法 (上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男女无套免费视频网站动漫 | 成人a v视频 | 18无码粉嫩小泬无套在线观看 | 成年人的黄色片 | 久草不卡 | 久久久一级黄色片 | 欧美黄色录像视频 | 男女啪啪免费网站 | 午夜影院久久久 | 久久视频一区 | 偷拍自拍一区 | 亚洲国产免费av | 国产艳俗歌舞表演hd | 欧美xxxbbb| 在线观看视频一区 | 免费无毒av | 亚洲精品激情视频 | 伊人久久青青 | 日本三级中文字幕在线观看 | 国产一区二区三区精品在线观看 | 午夜一级大片 | 女人下面喷水视频 | 亚洲无人区码一码二码三码的含义 | 婷婷丁香激情 | 无码精品视频一区二区三区 | 国产精品伦理一区二区 | 久99久视频| 亚洲免费一 | 成人乱码一区二区三区av | 久久久www免费人成人片 | 美女久久视频 | 日本精品免费一区二区三区 | 国产精品情侣自拍 | 不卡视频在线观看免费 | 香港黄色网 | 亚洲视频在线观看一区 | 日韩永久免费视频 | 深爱五月综合网 | 天天射天天色天天干 | 国精品一区二区三区 | 亚洲人xxx | 欧美性生话| 一级成人免费 | 成人免费xxxxx在线观看 | 耳光调教vk| 高清av一区二区三区 | 在线免费观看毛片 | 久久久精品人妻一区二区三区色秀 | 偷拍青青草 | 先锋av资源| 97国产| 国产伦精品一区二区三区高清 | 美日韩精品 | 黄色调教视频 | 蜜桃成人网 | 三级在线国产 | 夜夜嗨av一区二区三区四区 | 青青色在线观看 | 欧美二三区 | 国产精品久久久久久三级 | 国产午夜免费福利 | 香港一级淫片免费放 | 亚洲一区二区天堂 | 免费在线看黄视频 | 伊人久久久久久久久 | 天堂а在线中文在线新版 | 国产xxx视频 | 国产高清在线视频观看 | 久久aⅴ国产欧美74aaa | 国产无套内射普通话对白 | 99精品国产免费 | 国模私拍av| 在线cao | 69久久久久久 | 一区二区三区在线不卡 | 中文人妻熟女乱又乱精品 | 波多野结衣乳巨码无在线观看 | 成人在线观看18 | 精品国产自在精品国产精小说 | 视频1区| 色人阁av| 欧美人体视频一区二区三区 | 黄色网页免费 | 欧美黄色特级视频 | 国产日韩欧美视频在线 | 免费视频日韩 | 国产这里有精品 | 精品国产免费无码久久久 | 青青操免费在线视频 | 在线观看免费看片 | 亚洲综合激情另类小说区 | aaaa黄色片| 五月精品 | 久久福利电影 | 91视频亚洲| 九九热在线免费观看 | 激情深爱五月 | 中文字幕精品一区二区精 | 国产东北真实交换多p免视频 |