Studying-Swift :Day01

来源:http://www.cnblogs.com/ifish1990/archive/2016/08/29/5819003.html
-Advertisement-
Play Games

學習地址:http://www.rm5u.com/ 或 http://www.runoob.com/ iPhone或iTouch的寬為320像素,高為480像素,狀態欄高為20像素,toobar高為44像素,tabbar高為49像素,導航欄高為44像素。 typealias:類型別名對當前的類型定義 ...



 

學習地址http://www.rm5u.com/       http://www.runoob.com/

  1. 如果創建的是 OS X playground 需要引入 Cocoa;  如果我們想創建 iOS playground 則需要引入 UIKit .
  2. iPhone或iTouch的寬為320像素,高為480像素,狀態欄高為20像素,toobar高為44像素,tabbar高為49像素,導航欄高為44像素。

  3. typealias:類型別名對當前的類型定義了另一個名字;

  4. Swfit語言定義尾碼?作為命名類型Optional(可選)的簡寫;

    var optionalInteger: Int?
    //或者
    var optionalInteger: Optional<Int>
  5. 強制解析:當你確定可選類型確實包含值之後,你可以在可選的名字後面加一個感嘆號(!)來獲取值。

    var myString:String?
        myString = "Hello, Swift!"
        if myString != nil {
           // 強制解析
            print( myString! )
        } else {
           print("myString 值為 nil")
        }

    註意:使用!來獲取一個不存在的可選值會導致運行時錯誤。使用!來強制解析值之前,一定要確定可選包含一個非nil的值。

  6. 自動解析:你可以在聲明可選變數時使用感嘆號(!)替換問號(?)。

    var myString:String!
        myString = "Hello, Swift!"
        if myString != nil {
            print(myString)
        } else {
           print("myString 值為 nil")
        }
  7. 可選綁定:使用可選綁定(optional binding)來判斷可選類型是否包含值,如果包含就把值賦給一個臨時常量或者變數。

    if let constantName = someOptional {
            statements
       }
    // example :
       var myString : String?
       myString = "Hello, Swift!"
       if let yourString = myString {
           print("你的字元串值為 - \(yourString)")
       } else {
           print("你的字元串沒有值")
       }
  8. 整型字面量可以是一個十進位,二進位,八進位或十六進位常量。 二進位首碼為 0b,八進位首碼為 0o,十六進位首碼為 0x,十進位沒有首碼
    let decimalInteger = 17           // 17 - 十進位表示
    let binaryInteger = 0b10001       // 17 - 二進位表示
    let octalInteger = 0o21           // 17 - 八進位表示
    let hexadecimalInteger = 0x11     // 17 - 十六進位表示
  9. 註意:Swift中的字母採用的是Unicode編碼[1]。Unicode叫做統一編碼制,它包含了亞洲文字編碼,如中文、日文、韓文等字元,甚至是我們在聊天工具中使用的表情符號
    如果一定要使用關鍵字作為標識符,可以在關鍵字前後添加重音符號(`)

  10. 浮點型字面量的預設推導類型為 Swift 標準庫類型中的 Double,表示64位浮點數。
    十進位浮點型字面量 :1.25e2 表示 1.25 ⨉ 10^2,也就是 125.0;同樣,1.25e-2 表示 1.25 ⨉ 10^-2,也就是 0.0125。
    十六進位浮點型字面量:0xFp2 表示 15 ⨉ 2^2,也就是 60;同樣,0xFp-2 表示 15 ⨉ 2^-2,也就是 3.75。
    eg:   浮點型字面量允許使用下劃線 _ 來增強數字的可讀性,下劃線會被系統忽略,因此不會影響字面量的值。同樣地,也可以在數字前加 0,並不會影響字面量的值。
  11. 字元串型字面量:

    轉移字元含義
    \0 空字元
    \\ 反斜線 \
    \b 退格(BS) ,將當前位置移到前一列
    \f 換頁(FF),將當前位置移到下頁開頭
    \n 換行符
    \r 回車符
    \t 水平製表符
    \v 垂直製表符
    \' 單引號
    \" 雙引號
    \000 1到3位八進位數所代表的任意字元
    \xhh... 1到2位十六進位所代表的任意字元
  12. 位運算符:位運算符用來對二進位位進行操作,~,&,|,^分別為取反,按位與與,按位與或,按位與異或運算,如下表實例:
    pqp & qp | qp ^ q
    0 0 0 0 0
    0 1 0 1 1
    1 1 1 1 0
    1 0 0 1 1
    指定  A = 0011 1100      ;   B = 0000 1101
    運算符描述圖解實例
    & 按位與。按位與運算符對兩個數進行操作,然後返回一個新的數,這個數的每個位都需要兩個輸入數的同一位都為1時才為1。 (A & B) 結果為 12, 二進位為 0000 1100
    | 按位或。按位或運算符|比較兩個數,然後返回一個新的數,這個數的每一位設置1的條件是兩個輸入數的同一位都不為0(即任意一個為1,或都為1)。 (A | B) 結果為 61, 二進位為 0011 1101
    ^ 按位異或. 按位異或運算符^比較兩個數,然後返回一個數,這個數的每個位設為1的條件是兩個輸入數的同一位不同,如果相同就設為0。 (A ^ B) 結果為 49, 二進位為 0011 0001
    ~ 按位取反運算符~對一個操作數的每一位都取反。 (~A ) 結果為 -61, 二進位為 1100 0011 in 2's complement form.
    << 按位左移。左移操作符(<<)將操作數的所有位向左移動指定的位數。

    下圖展示了11111111 << 1(11111111 左移一位)的結果。藍色數字表示被移動位,灰色表示被丟棄位,空位用橙色的0填充。

    A << 2 結果為 240, 二進位為 1111 0000
    >> 按位右移。右移操作符(<<)將操作數的所有位向又移動指定的位數。

    下圖展示了11111111 >> 1(11111111 右移一位)的結果。藍色數字表示被移動位,灰色表示被丟棄位,空位用橙色的0填充。

    A >> 2 結果為 15, 二進位為 0000 1111
  13. 賦值運算:
    運算符描述實例
    = 簡單的賦值運算,指定右邊操作數賦值給左邊的操作數。 C = A + B 將 A + B 的運算結果賦值給 C
    += 相加後再賦值,將左右兩邊的操作數相加後再賦值給左邊的操作數。 C += A 相當於 C = C + A
    -= 相減後再賦值,將左右兩邊的操作數相減後再賦值給左邊的操作數。 C -= A 相當於 C = C - A
    *= 相乘後再賦值,將左右兩邊的操作數相乘後再賦值給左邊的操作數。 C *= A 相當於 C = C * A
    /= 相除後再賦值,將左右兩邊的操作數相除後再賦值給左邊的操作數。 C /= A 相當於 C = C / A
    %= 求餘後再賦值,將左右兩邊的操作數求餘後再賦值給左邊的操作數。 C %= A 相當於 C = C % A
    <<= 按位左移後再賦值 C <<= 2 相當於 C = C << 2
    >>= 按位右移後再賦值 C >>= 2 相當於 C = C >> 2
    &= 按位與運算後賦值 C &= 2 相當於 C = C & 2
    ^= 按位異或運算符後再賦值 C ^= 2 相當於 C = C ^ 2
    |= 按位或運算後再賦值 C |= 2 相當於 C = C | 2
  14. 區間運算符:
    運算符描述實例
    閉區間運算符 閉區間運算符(a...b)定義一個包含從a到b(包括a和b)的所有值的區間,b必須大於等於a。 ‌ 閉區間運算符在迭代一個區間的所有值時是非常有用的,如在for-in迴圈中: 1...5 區間值為 1, 2, 3, 4 和 5
    半開區間運算符 半開區間(a..<b)定義一個從a到b但不包括b的區間。 之所以稱為半開區間,是因為該區間包含第一個值而不包括最後的值。<="" td=""> 1..< 5 區間值為 1, 2, 3, 和 4
  15. 三目運算符:(a ? b : c) -- 如果a為true,值為b,否則為c.
  16. 運算符優先順序:
    • 指針最優,單目運算優於雙目運算。如正負號。
    • 先乘除(模),後加減。
    • 先算術運算,後移位運算,最後位運算。請特別註意:1 << 3 + 2 & 7 等價於 (1 << (3 + 2))&7
    • 邏輯運算最後計算
      運算符類型運算符結合方向
      表達式運算 () [] . expr++ expr-- 左到右
      一元運算符

      * & + - ! ~ ++expr --expr

      * / %

      + -

      >> <<

      < > <= >=

      == !=

      右到左
      位運算符

      &

      ^

      |

      &&

      ||

      左到右
      三元運算符 ?: 右到左
      賦值運算符 = += -= *= /= %= >>= <<= &= ^= |= 右到左
      逗號 , 左到右
  17. Swift 條件語句
    語句描述

    if 語句

    if 語句 由一個布爾表達式和一個或多個執行語句組成。

    if...else 語句

    if 語句 後可以有可選的 else 語句else 語句在布爾表達式為 false 時執行。

    if...else if...else 語句

    if 後可以有可選的 else if...else 語句, else if...else 語句常用於多個條件判斷。

    內嵌 if 語句

    你可以在 if 或 else if 中內嵌 if 或 else if 語句。

    switch 語句

    switch 語句允許測試一個變數等於多個值時的情況。

  18. Swift 迴圈
    迴圈類型描述

    for-in

    遍歷一個集合裡面的所有元素,例如由數字表示的區間、數組中的元素、字元串中的字元。

    for 迴圈

    用來重覆執行一系列語句直到達成特定條件達成,一般通過在每次迴圈完成後增加計數器的值來實現。

    while 迴圈

    運行一系列語句,如果條件為true,會重覆運行,直到條件變為false。

    repeat...while 迴圈

    類似 while 語句區別在於判斷迴圈條件之前,先執行一次迴圈的代碼塊。

    控制語句描述

    continue 語句

    告訴一個迴圈體立刻停止本次迴圈迭代,重新開始下次迴圈迭代。

    break 語句

    中斷當前迴圈。

    fallthrough 語句

    如果在一個case執行完後,繼續執行下麵的case,需要使用fallthrough(貫穿)關鍵字。
  19. Swift 字元串
    創建字元串:你可以通過使用字元串字面量或 String 類的實例來創建一個字元串:
    import UIKit
    
    // 使用字元串字面量
    var stringA = "Hello, World!"
    print( stringA )
    
    // String 實例化
    var stringB = String("Hello, World!")
    print( stringB )

    空字元串:你可以使用空的字元串字面量賦值給變數或初始化一個String類的實例來初始值一個空的字元串。 我們可以使用字元串屬性 isEmpty 來判斷字元串是否為空:

    import UIKit
    
    // 使用字元串字面量創建空字元串
    var stringA = ""
    
    if stringA.isEmpty {
       print( "stringA 是空的" )
    } else {
       print( "stringA 不是空的" )
    }
    
    // 實例化 String 類來創建空字元串
    let stringB = String()
    
    if stringB.isEmpty {
       print( "stringB 是空的" )
    } else {
       print( "stringB 不是空的" )
    }

    字元串常量:你可以將一個字元串賦值給一個變數或常量,變數是可修改的,常量是不可修改的。
    字元串中插入值:字元串插值是一種構建新字元串的方式,可以在其中包含常量、變數、字面量和表達式。 您插入的字元串字面量的每一項都在以反斜線為首碼的圓括弧中:

    import UIKit
    
    var varA   = 20
    let constA = 100
    var varC:Float = 20.0
    
    var stringA = "\(varA) 乘以 \(constA) 等於 \(varC * 100)"
    print( stringA )

    字元串連接:字元串可以通過 + 號來連接。
    字元串長度:字元串長度使用 String.characters.count 屬性來計算
    字元串比較:可以使用 == 來比較兩個字元串是否相等
    Unicode 字元串:Unicode 是一個國際標準,用於文本的編碼,Swift 的 String 類型是基於 Unicode建立的。你可以迴圈迭代出字元串中 UTF-8 與 UTF-16 的編碼,實例如下:

    import UIKit
    
    var unicodeString   = "學習教程"
    
    print("UTF-8 編碼: ")
    for code in unicodeString.utf8 {
       print("\(code) ")
    }
    
    print("\n")
    
    print("UTF-16 編碼: ")
    for code in unicodeString.utf16 {
       print("\(code) ")
    }

    字元串函數以及運算符:

    序號函數/運算符 & 描述
    1

    isEmpty

    判斷字元串是否為空,返回布爾值

    2

    hasPrefix(prefix: String)

    檢查字元串是否擁有特定首碼

    3

    hasSuffix(suffix: String)

    檢查字元串是否擁有特定尾碼。

    4

    Int(String)

    轉換字元串數字為整型。 實例:

    let myString: String = "256"
    let myInt: Int? = Int(myString)

     

    5

    String.characters.count

    計算字元串的長度

    6

    utf8

    您可以通過遍歷 String 的 utf8 屬性來訪問它的 UTF-8 編碼

    7

    utf16

    您可以通過遍歷 String 的 utf8 屬性來訪問它的 UTF-16 編碼

    8

    unicodeScalars

    您可以通過遍歷String值的unicodeScalars屬性來訪問它的 Unicode 標量編碼.

    9

    +

    連接兩個字元串,並返回一個新的字元串

    10

    +=

    連接操作符兩邊的字元串並將新字元串賦值給左邊的操作符變數

    11

    ==

    判斷兩個字元串是否相等

    12

    <

    比較兩個字元串,對兩個字元串的字母逐一比較。

    13

    !=

    比較兩個字元串是否不相等。

  20. Swift 字元(Character)
    Swift 的字元是一個單一的字元字元串字面量,數據類型為 Character:
    import UIKit
    
    let char1: Character = "A"
    let char2: Character = "B"
    
    print("char1 的值為 \(char1)")
    print("char2 的值為 \(char2)")

    註意:如果想在 Character(字元) 類型的常量中存儲更多的字元,則程式執行會報錯。
         Swift 中不能創建空的 Character(字元) 類型變數或常量。
    遍歷字元串中的字元:Swift 的 String 類型表示特定序列的 Character(字元) 類型值的集合; 每一個字元值代表一個 Unicode 字元;您可通過for-in迴圈來遍歷字元串中的characters屬性來獲取每一個字元的值:

    import UIKit
    
    for ch in "Hello".characters {
       print(ch)
    }

    字元串連接字元:使用 String 的 append() 方法來實現字元串連接字元:

    import UIKit
    
    var varA:String = "Hello "
    let varB:Character = "G"
    
    varA.append( varB )
    
    print("varC  =  \(varA)")
  21. Swift 數組
    創建數組:
          可以使用構造語法來創建一個由特定數據類型構成的空數組:
            var someArray = [someType]()

          創建一個初始化大小數組的語法:
               var someArray = [someType](count: NumberofElements, repeatedValues: InitialValue)
          創建一個類型為Int,大小為3,初始值為0的空數組:
               var someInts = [Int](count: 3, repeatedValues: 0)
          創建含有三個元素的數組:
               var someInts:[Int] = [10,20,30]

    訪問數組:我們可以根據數組的索引來訪問數組的元素:
          var someVar = someArray[index]

    修改數組:可以使用 append() 方法或者賦值運算符 += 在數組末尾添加元素,如下所示,我們初始化一個數組,並向其添               加元素,也可以通過索引修改數組元素的值。

    遍曆數組:可以使用for-in迴圈來遍歷所有數組中的數據項,如果我們同時需要每個數據項的值和索引值,可以使用 String                 的 enumerate() 方法來進行數組遍歷:
                  
    import UIKit
    
    var someStrs = [String]()
    
    someStrs.append("Apple")
    someStrs.append("Amazon")
    someStrs.append("Runoob")
    someStrs += ["Google"]
    
    for (index, item) in someStrs.enumerate() {
       print("在 index = \(index) 位置上的值為 \(item)")
    }

    合併數組:我們可以使用加法操作符(+)來合併兩種已存在的相同類型數組。新數組的數據類型會從兩個數組的數據類型中               推斷出來。
    Count屬性:可以使用count屬性來計算數組元素個數;

    isEmpty屬性:可以通過只讀屬性 isEmpty 來判斷數組是否為空,返回布爾值;

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 關於hibernate純sql查詢返回結果集問題(hbm.xml中不寫多表關聯),hibernate查詢綁定結果集 ...
  • 在一些有N個元素的集合應用問題中,我們通常是在開始時讓每個元素構成一個單元素的集合,然後按一定順序將屬於同一組的元素所在的集合合併,其間要反覆查找一個元素在哪個集合中。 如果n比較大,那麼反覆詢問你某個元素所在集合,你該怎麼做? 如果每次都遍歷,那麼顯然會超時,那麼用一些數據結構比如建樹什麼的,很可 ...
  • 在讀本文之前,請先閱讀 LCD1602 的 datasheet(百度到處都是) ,熟悉有關的11條指令集。 LCD1602的11個指令集鏈接 http://www.cnblogs.com/aslmer/p/5801363.html(這是我總結的11條指令集,中英文結合) 1、LCD1602基礎知識 ...
  • C 預處理器不是編譯器的組成部分,是編譯過程中一個單獨的步驟。C預處理器只是一個文本替換工具,它會指示編譯器在實際編譯之前完成所需的預處理。 所有的預處理器命令都是以井號(#)開頭。它必須是第一個非空字元,為了增強可讀性,預處理器指令應從第一列開始。 下表包含所有重要的預處理器指令: 指令 描述 # ...
  •  Django 中的 csrf_token 與單元測試 在 "《Python Web開發:測試驅動方法》" 一書中作者使用的 Django 版本是 1.7,而我使用的是1.9.7版(官網已經更新到1.10了)。這就導致書中給出的代碼可能有“過時”的部分。 比如,下麵是第三章一個單元測試 的代碼,運 ...
  • 題目描述有以下幾個問題:1 給定正整數 求方程 的最小非負整數解。2 給定正整數 求方程 的最小非負整數解。3 給定正整數 求方程 在模 意義下解的數量。4 給定正整數 求 的值。其中 是歐拉函數, 是莫比烏斯函數。輸入格式輸入文件共四行,按上述描述中四個問題的順序,給出每個問題。第一行三個正整數 ... ...
  • 初衷:本人初學SpringMVC的時候遇到各種稀奇古怪的問題,網上各種技術論壇上的帖子又參差不齊,難以一步到位達到配置好的效果,這裡我將我配置的總結寫到這裡供大家初學SpringMVC的同僚們共同學習使用! ...
  • 因為打算全屏顯示一個對話框,而對話框內有幾個QLabel的尺寸要在確定QLabel可用的最大尺寸後,再根據內容調整一次,所以在對話框構造函數內就想確定QLabel的最大尺寸,但因為QWidget::updateGeometry()和QWidget::update()都只能用於可見的控制項,所以如何在控 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...