1. 簡單值
使用let聲明常量 : 一個常量的值在編譯時並不需要獲取,但是隻能爲它賦值一次。(你只需要決定一次,但是需要使用很多次)。
使用var聲明變量
使用時,常量或者變量的類型必須和你賦給它們的值一樣。
var myNumber = 250
myNumber = 13
let myNumber = 250 //這裏myNumber是整數(integer)
當 初始值 沒有提供足夠的信息 (或者沒有初始值),需要在變量後面聲明類型,用冒號分割。
let implicitInteger = 50
let implicitDouble = 50.0
let explicitDouble:Double = 70 (顯式)
值永遠不會被隱式轉換爲其他類型。若需要把一個值轉換成其他類型,請顯式轉化。
let label = "The width is" //判斷是字符串
let width = 94 //判斷是數字
let widthLabel = label + String(width); //顯式 數字轉化爲字符串
println(label);
使用\() 轉化
let apples = "apples"
let oranges = "oranges"
let myApples = "5 \(apples)"
println(myApples);
使用 : 加 空格 加類型名在變量貨常量名之後可以完成類型註解
var welcomeMessage: String
聲明一個叫welcomeMessage的變量,類型是String
常量和變量的命名
swift可以使用幾乎任何字符來作爲常量和變量包括Unicode
let π = 3.14149
let 你好 = "你好世界"
但是名稱中不能含有數字符號,箭頭,無效的unicode,橫線和製表符且不能以數字開頭。數字可以包含在名稱裏。一旦完成聲明,就不能再次聲明相同名稱的變量或常量,或者改變它的類型。變量和常量也不能互換。
swift在字符串中插入變量名作爲佔位符,使用反斜槓\和小括號來提示swift替換變量/常量名爲其實際的值
var friendlyWelcome = "hello"
friendlyWelcome = "Bonjour"
println("the current value of friendlyWelcome is \(friendlyWelcome)")
整數邊界
使用min或者max值來獲取改類型的最大值最小值
let minValue = UInt8.min
let maxValue = UInt8.max
println("min is \(minValue) max is \(maxValue)")
//min is 0 max is 255
浮點數
double比float精度更高
數值量表達
十進制不帶前綴
二進制帶前綴0b
八進制帶前綴0o
十六進制帶前綴0x
let decimalInteger = 17
let binaryInteger = 0b10001 // 17 in binary notation
let octalInteger = 0o21 // 17 in octal notation
let hexadecimalInteger = 0x11 // 17 inhexadecimal notation
println(binaryInteger)
浮點文本可以是十進制(不帶前綴)或十六進制(以0x前綴)。它們必須始終具有在小數點的兩側(或十六進制數)。他們也可以有一個可選的指數,由一個大寫或小寫e表示十進制浮點數表示,或大寫或小寫p表示十六進制浮點數
let a = 25e2 //表示25乘以10的2次方
let b = 0xFp2 //表示15乘以2的2次方
let c = 0xFp-2 // 表示15乘以2的負2次方
println(a,b,c) //(2500.0, 60.0, 3.75)
let aa = 1_000_000.000_000
println(aa) //1000000.0
let twoThousand: UInt = 16
let one: UInt = 16
let three = twoThousand + one
println(three) //32
let twoThousand: UInt8 = 16
let one: UInt = 16
let three = UInt(twoThousand) + one
//println(three) //32
let q = 3
let p = 0.14159
let qi = q + Int(p)
let pi = Double(q) + p
println(qi) //3
println(pi) //3.14159
類型別名
類型別名爲現有類型定義的代替名稱,可以使用typealias關鍵字定義類型別名。當使用的類型名稱更符合上下文時,可以定義如:
typealias AudioSample = UInt16
一旦定義了一個類型別名,你可以在任何會使用原來的名稱地方使用別名:
var maxAmplitudeFound = AudioSample.min
AudioSample被定義爲一個UInt16的別名。因爲它是一個別名,調用AudioSample.min實際上是調用了UInt16.min,給maxAmplitudeFound變量賦初始值0
BOOL類型
Swift中的BOOL值分別是true和false
let something = false
if something{
println("abcdefg")
}else{
println("hijklmn")
}
Swift的類型安全策略會紡織其他非BOOL類型轉換爲BOOL類型使用,比如
let something = 1
if something{
println("abcdefg")
}else{
println("hijklmn")
}
報錯: Type 'Int' does not conform to protocol 'LogicValue'
修改後即可運行:
let something = 1
if something == 1{
println("abcdefg")
}else{
println("hijklmn")
}
元組類型
元組類型可以將一些不同的數據類型組裝成一個元素,這個元素可以用來作爲函數的返回值返回包含很多種數據類型的值。
let http404Error = (404,"Not Found")
println(http404Error)
let http404Error = (404,"Not Found")
let (statusCode, statusMessage) = http404Error
println("the status code is \(statusCode)")
//the status code is 404
如果僅需要元組中的個別值,可以使用(_)來忽略不需要的值
let myExample = (1, 2, "baby","boy")
let (example1, _ ,_ ,_) = myExample
let (_,example2,_,_) = myExample
let (_,_,example3,_) = myExample
let (_,_,_,example4) = myExample
println("the example is \(example1)") //the example is 1
println("the example is \(example2)") //the example is 2
println("the example is \(example3)") //the example is baby
println("the example is \(example4)") //the example is boy
也可以使用元素序號來選擇元組中的值,注意序號是從0開始的
println("the example5 is \(myExample.1)") //the example is 2
println("the example6 is \(myExample.3)") //the example is boy
在創建一個元組的時候,也可以直接指定每個元素的名稱,然後直接使用元組名.元素名訪問。如:
let myExample = (num1:1,num2:2,str1:"baby",str2:"boy")
println(myExample.num2) //2
可選類型
在一個值可能不存在的時候,可以使用可選類型。這種類型的定義是,要麼存在這個值,且等於x,要麼不存在這個值。
這個類型在C和OC中是不存在的,但是OC裏有個相似的類型,叫nil,但僅僅對對象有用。
舉慄:
在Swift中String類型有一個叫toInt的方法,能夠將一個字符串轉化爲一個int類型。但是需要注意的是,不是所有字符都可以轉化成爲整數。"123"可以轉化成123,"hello"不能被轉化。
let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
println(convertedNumber) //123
let possibleNumber = "hello"
let convertedNumber = possibleNumber.toInt()
println(convertedNumber) //nil
由於toInt方法可能會失敗,因此它會返回一個可選的Int類型,而不同於Int類型,一個可選的Int類型被記爲Int?
問號表名它的值是可選的,可能返回的是一個Int,或者返回的值不存在
可以使用if語句來檢測一個可選類型包含一個特定的值,如果一個可選類型確實包含了一個值,在if語句中它將返回true,否則返回false。如果你已經檢測確認該值存在,那麼可以使用或者輸出它,在輸出的時候只需要在名稱後面加上感嘆號(!)即可,意思是告訴編譯器:我已經檢測好這個值了,可以使用它了。
let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
if convertedNumber {
println("\(possibleNumber) has a integer value of \(convertedNumber!)")
}else{
println("\(possibleNumber) could not be converted to a integer")
}
//123 has a integer value of 123
let possibleNumber = "hello"
let convertedNumber = possibleNumber.toInt()
if convertedNumber {
println("\(possibleNumber) has a integer value of \(convertedNumber!)")
}else{
println("\(possibleNumber) could not be converted to a integer")
}
//hello could not be converted to a integer
選擇性綁定
使用一個變量或者常量來綁定一個可選類型,在if和while語句中,來檢查該值是否存在,然後在繼續使用它。綁定方法如下:
let possibleNumber = "hello"
if let actualNumber = possibleNumber.toInt(){
println("\(possibleNumber) has a integer value of \(actualNumber)")
}else{
println("\(possibleNumber) could not be converted to a integer")
}
//hello could not be converted to a integer
let possibleNumber = "123"
if let actualNumber = possibleNumber.toInt(){
println("\(possibleNumber) has a integer value of \(actualNumber)")
}else{
println("\(possibleNumber) could not be converted to a integer")
}
//123 has a integer value of 123
當判斷optional 爲nil是返回false,當不爲nil時返回true
可以給可選類型指定一個特殊的值nil:
var serverRespomseCode: Int? = 404
println(serverRespomseCode) //404
serverRespomseCode = nil
println(serverRespomseCode) //nil
如果定義了一個可選類型並且沒有給初始值時,會默認設置爲nil
var surveyAnswer:String?
println(surveyAnswer) //nil
注: Swift 的nil不同於Object-C中的nil. Object-C中,nil是一個指針指向不存在的對象。Swift中,nil不是指針而是一個特定類型的空值。任何類型的可選變量都可以被設爲nil,不光是指針。
上面的例子中,可選類型表示一個常量/變量可以沒有值。可選類型可以被if語句檢測是否有值,並且可以被可選綁定解包。
但是在一些情況下,可選類型是一直有效的,那麼可以通過定義來隱式地去掉類型檢查,強制使用可選類型。這些可選類型被成爲隱式解包的可選類型。可以直接在類型後面加!
而不是?來指定。
隱式解包的可選類型本質是可選類型,但是可以被當成一般類型來使用,不需要每次驗證值是否存在。
let possibleString: String? = "An optional string"
println(possibleString!)
let assumedString: String! = "An implicitily unwrapped optional string"
println(assumedString)
直接在變量後面加上!,String!,這樣可以確保該值一定存在。
使用斷言
只有在滿足特定條件的時候,代碼纔會繼續執行。
使用斷言調試:
斷言是一種實時檢測條件是否爲true的方法。
如果這個條件是false,那麼代碼將會終端執行。
在Xcode中,在調試的時候如果終端,可以通過查看調試語句來找出問題所在。
使用全局函數assert來使用斷言調試,如:
let age = 3
assert(age <= 0,"abc")
//assertion failed: abc: /.../main.swift, line 141
控件類使用(轉載): http://blog.csdn.net/zhang_biao_1991/article/details/30198371
爲了方便測試學習,先學習如何創建一個視圖控制器
----------------------------------------------------------------------------------ViewController
appDelegate.swift
//創建一個<span style="font-size:18px;">視圖</span>控制器
let test_vc = TestController();
//設置self.windows根<span style="font-size:18px;">視圖</span>控制器
self.window!.rootViewController = test_vc;
Test.swift
import Foundation
import UIKit
class TestController:UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad();
}
}
----------------------------------------------------------------------------------ViewController