swift語法和java的比較

1. 定義常量和變量html

a. Swift語法編程

常量:swift

let MaxNumber = 10

變量:安全

var name = 1

b. Java語法數據結構

常量:app

public final int MaxNumber= 10;

變量:less

public String name = "morden";

這裏要注意的是swift有類型標註(type annotation)這個語法:若是要添加類型標註,須要在常量或者變量名後面加上一個冒號和空格,而後加上類型名稱。可是由於swift編譯器能夠進行類型安全斷定,因此通常爲了代碼簡練,函數

能夠不加類型標註,關於類型標註,後面會有提到。加類型標註的語法以下:spa

常量:.net

let MaxNumber :Int = 10

變量:

var name : String = "morden"

常量與變量名不能包含數學符號,箭頭,保留的(或者非法的)Unicode 碼位,連線與製表符。也不能以數字開頭,可是能夠在常量與變量名的其餘地方包含數字。

 2. Swift和Java的輸出語法

Swift:

 print("hello world")

Java

System.out.println("hello world");

3. 註釋

Swift和Java註釋大致相同,均可以單行註釋和多行註釋。惟一不一樣點就是Swift支持多行註釋能夠嵌套在其它的多行註釋中。

/* 這是第一個多行註釋的開頭
/* 這是第二個被嵌套的多行註釋 */
這是第一個多行註釋的結尾 */

4. 分號

Java要求每一行代碼都有分號,而Swift不一樣,不要求每一行必須有分號,可是一種狀況除外:當在同一行內寫多條獨立的語句時候,每一個語句須要分號隔開

 let apple : String  = "apple" ; print("hello world");

5. 類型標註

類型標註:在Swift中,每次聲明常量和變量的時候,不是必定要顯式指定類型。若是你沒有顯式指定類型,Swift 會使用類型推斷(type inference)來選擇合適的類型。有了類型推斷,編譯器能夠在編譯代碼的時候自動推斷出表達式的類型。Swift 和Java都是一個類型安全(type safe)的語言。若是你申明的變量是String類型的時候,再對其進行賦值時候,傳了int類型,編譯器會報錯。可是在語法上,這兩個語言有所不一樣。

Java通常申明變量時候,會將類型放在前面,以下代碼:

String name = "morden";

Swift會將類型放在後面,以下代碼:

var name : String = "morden"

而有時候,咱們申明變量時候,不加類型,編譯器就會本身推斷變量類型,這就是類型標註

 在Swift中,具體類型標註代碼以下:

let number = 42
number會被推測爲 Int 類型
let anotherNumber = 3 + 0.14159

原始值 anotherNumber 沒有顯式聲明類型,而表達式中出現了一個浮點字面量,因此表達式會被推斷爲Double類型。

6. 數值型字面量

Swift和Java在數值型字面量方面有不少異同,只有十進制和16進製表示是相同的。

Swift:

  • 一個十進制數,沒有前綴
  • 一個二進制數,前綴是0b
  • 一個八進制數,前綴是0o
  • 一個十六進制數,前綴是0x

Java: 

  • 一個十進制數,沒有前綴
  • 一個二進制數,Java沒有二進制的表示方式,通常都16進製表示
  • 一個八進制數,前綴是0
  • 一個十六進制數,前綴是0x

另外,Swift數值類字面量能夠包括額外的格式來加強可讀性。整數和浮點數均可以添加額外的零而且包含下劃線,並不會影響字面量:

let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1

 7. 整數和浮點數轉換

Swift:Swift中不支持隱式轉換,當兩個變量存儲不一樣範圍的值時候,因此你必須根據不一樣狀況選擇性使用數值型類型轉換。代碼以下:

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine

這個例子中,常量three的值被用來建立一個Double類型的值,因此加號兩邊的數類型須相同。若是不進行轉換,二者沒法相加。

Java支持隱式轉換,代碼以下:

int three = 3;
double pointOneFourOneFiveNine = 0.14159;
double pi = three + pointOneFourOneFiveNine;

Swift語法支持類型別名,這點Java不支持,當在編程中,定義了一個類型別名以後,你能夠在任何使用原始名的地方使用別名。具體代碼以下:

typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min
UInt16 取值範圍是0-255 maxAmplitudeFound 如今是 0

 8. 布爾值

Swift的布爾(Boolean)類型,關鍵字叫作Bool。Java是boolean關鍵字。具體用法上有點差異,可是還在接受範圍以內。

Swift:

let flag : Bool = false
        if flag{
            print("Mmm, tasty turnips!")
        }else{
            print("Eww, turnips are horrible.")
        }

Java:

    boolean flag = true;
        if(flag){
            System.out.println("Mmm, tasty turnips!");
        }else{
            System.out.println("Eww, turnips are horrible.");
        }

9. key-value

Swift提出了一個很是有意思的語法叫元組。有點相似Java的map數據結構,可是又與map有很是大的不一樣。這裏介紹下元組的用法。

let http404Error = (404, "Not Found")
let http200Status = (statusCode: 200, description: "OK")
//能夠在定義元組的時候給單個元素命名:// http404Error 的類型是 (Int, String),值是 (404, "Not Found")

能夠將一個元組的內容分解(decompose)成單獨的常量和變量,而後你就能夠正常使用它們:

print(statusCode)
print("The status code is \(http404Error.0)")
print("The status code is \(http404Error.statusCode)")
print(statusMessage)
print("The status code is \(http404Error.1)")
print("The status code is \(http404Error.description)")

10. 可選類型(optionals)

咱們先看下面一段代碼:

let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// convertedNumber 被推測爲類型 "Int?", 或者類型 "optional Int"

由於toInt方法可能會失敗,因此它返回一個可選類型(optional)Int,而不是一個Int。一個可選的Int被寫做Int?而不是Int。問號暗示包含的值是可選類型,也就是說可能包含Int值也可能不包含值。(不能包含其餘任何值好比Bool值或者String值。只能是Int或者什麼都沒有。)

當你肯定可選類型確實包含值以後,你能夠在可選的名字後面加一個感嘆號(!)來獲取值。這個驚歎號表示「我知道這個可選有值,請使用它。」這被稱爲可選值的強制解析(forced unwrapping)

let possibleNumber = "123"
let convertedNumber=Int(possibleNumber);
let stee = convertedNumber!
//stee 是Int,不是Int?

可選綁定(optional binding):來判斷可選類型是否包含值,若是包含就把值賦給一個臨時常量或者變量。看下面代碼:

let possibleNumber = "123"
        if let actualNumber = Int(possibleNumber) {
            print("\(actualNumber) has an integer value of \(actualNumber)")
        } else {
            print("\(possibleNumber) could not be converted to an integer")
        }
        // 輸出 "123 has an integer value of 123"

「若是possibleNumber.toInt返回的可選Int包含一個值,建立一個叫作actualNumber的新常量並將可選包含的值賦給它。」

若是轉換成功,actualNumber常量能夠在if語句的第一個分支中使用。它已經被可選類型包含的值初始化過,因此不須要再使用!後綴來獲取它的值。在這個例子中,actualNumber只被用來輸出轉換結果。

11. nil

在 Swift 中,nil不是指針——它是一個肯定的值,用來表示值缺失。任何類型的可選狀態均可以被設置爲nil,不僅是對象類型。一些簡單的用法以下:

var serverResponseCode: Int? = 404
// serverResponseCode 包含一個可選的 Int 值 404
serverResponseCode = nil
// serverResponseCode 如今不包含值
var surveyAnswer: String?
// surveyAnswer 被自動設置爲 nil

12. 隱式解析可選類型

隱式解析可選類型(implicitly unwrapped optionals)。把想要用做可選的類型的後面的問號(String?)改爲感嘆號(String!)來聲明一個隱式解析可選類型,隱式解析可選類型主要被用在 Swift 中類的構造過程當中。

一個隱式解析可選類型其實就是一個普通的可選類型,可是能夠被當作非可選類型來使用,並不須要每次都使用解析來獲取可選值。下面的例子展現了可選類型String和隱式解析可選類型String之間的區別:

let possibleString: String? = "An optional string."
println(possibleString!) // 須要驚歎號來獲取值
// 輸出 "An optional string."
let assumedString: String! = "An implicitly unwrapped optional string."
println(assumedString)  // 不須要感嘆號
// 輸出 "An implicitly unwrapped optional string."

注意
若是你在隱式解析可選類型沒有值的時候嘗試取值,會觸發運行時錯誤。和你在沒有值的普通可選類型後面加一個驚歎號同樣。

13. 斷言

斷言會在運行時判斷一個邏輯條件是否爲true。從字面意思來講,斷言「斷言」一個條件是否爲真。你可使用斷言來保證在運行其餘代碼以前,某些重要的條件已經被知足。若是條件判斷爲true,代碼運行會繼續進行;若是條件判斷爲false,代碼運行中止,你的應用被終止。

若是你的代碼在調試環境下觸發了一個斷言,好比你在 Xcode 中構建並運行一個應用,你能夠清楚地看到不合法的狀態發生在哪裏並檢查斷言被觸發時你的應用的狀態。此外,斷言容許你附加一條調試信息。

你可使用全局assert函數來寫一個斷言。向assert函數傳入一個結果爲true或者false的表達式以及一條信息,當表達式爲false的時候這條信息會被顯示:

let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 由於 age < 0,因此斷言會觸發

當條件可能爲假時使用斷言,可是最終必定要保證條件爲真,這樣你的代碼才能繼續運行。斷言的適用情景:

  • 整數類型的下標索引被傳入一個自定義下標腳本實現,可是下標索引值可能過小或者太大。
  • 須要給函數傳入一個值,可是非法的值可能致使函數不能正常執行。
  • 一個可選值如今是nil,可是後面的代碼運行須要一個非nil值。

參考連接:

http://special.csdncms.csdn.net/the-swift-programming-language-in-chinese/Introduction/template/chapter2/01_The_Basics.html

相關文章
相關標籤/搜索