學習Swift筆記 (一)



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







發佈了19 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章