標籤:
swift還在不斷的更新做細微的調整,都說早起的鳥兒有蟲吃,那麼我們早點出發吧,趁著國內絕大多數的coder們還沒有開始大範圍普遍應用。
網上有些大神說:swift很簡單!我不同意這個觀點,假如你用helloword來說它文法精簡沒錯,但是這個簡單的例子不能證明它功能簡單!
我相信swift語言非常強大,擁有很多OC以前沒有的超強大物件導向特性!想用好並不容易!
下面是:比較系統的整理了自己學習swift 的筆記,一方面用作記錄,便於以後查閱,也分享給需要的朋友!
我是任海瑞,共勉!我與你還有很多有夢想的盟友們一起向著swift挑戰!
一、簡介
objective-c 30多年的語言,方括弧文法,嚇退不少人員。
swift是一門文法簡潔,功能強大的語言,借鑒JaveScript、Go 語言,強大語言,既支援函數式編程,也支援物件導向編程,支援函數和閉包,值傳遞,引用傳遞。
支援物件導向的封裝、繼承、多態準系統,也支援枚舉,結構體,類三種物件導向類型,建立執行個體,調用方法,允許定義屬性,方法,構造器,下標,巢狀型別。
想真正全面掌握swift的所有功能,並不簡單。
參考:The Swift Programming Language 編程指南
四部分:
1、開發環境,Playground功能和用法,終端編譯,運行程式;
2、基礎文法+函數式編程+String\Array/Dictionary等內建類型
3、物件導向編程+Foundation架構
4、MVC設計+UI控制項
Just Do It
swift語言是強型別語言,有非常嚴格的類型檢查,是編譯型語言,編譯後會得到可執行檔目標檔案。
不允許將可執行代碼放在類定義中
例如:
class Test{
println("hello")
}
架構:一系列函數、類等程式單元的集合,系統地提供某一方面的功能。
Terminal :swiftc命令編譯器 swiftc -o hello.out HelloWorld.swift
產生hello.out檔案
./hello.out 執行
func test(){
println("test function")
}
swiftc -o test.out Test.swift main.swift
為了能讓系統找到swift編譯命令,需要配置路徑添加到系統的PATH
修改Home 目錄下的.bash_profile檔案實現(隱藏檔案,進入Home,然後ls -a即可)
PATH = /Applications/Xcode-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH
:是兩個路徑之間的分隔字元
重啟系統即可
use core date複選框 是表示項目打算使用core Date 來訪問SQLite資料庫
測試案例:
setUp() 初始化基礎的測試資源
tearDown() 銷毀setUp()初始化的測試資源
wrap lines 自動換行
協助文檔中:C是類,M是方法,Pr是協議,f是函數
二、基礎資料型別 (Elementary Data Type)
注釋:代碼即是文檔。
var 變數:裝資料的小容器,
var name = "任海瑞"
printlin(name)
let 常量:一旦建立不能更改
var lastName= "ren"
allName = lastName + "hairui"
var str = "heri" 判斷Sting是否為空白 str.isEmpty
花括弧:{代碼塊} 包括:類,結構體,枚舉,函數體,方法體
方括弧:[數組元素或字典元素] a[] = 3 ; cross["swift"] = 80 //對cross字典中key為swift的元素賦值
圓括弧(定義元組或定義函數)
圓點. 類,結構體,枚舉,執行個體和它的成員(屬性和方法)調用
關鍵字:keyword 具有特殊用途的單詞
聲明:class,deinit,enum,extension,func,import,init,internal,let,operator,private,protocol,public,static,struct,subscript,typealias,var
語句:break,case,continue,default,do,else,fallthrough,for,if,in,return,switch,where,while
類型,運算式:as,dynamicType,false,is,nil,self,Self,super,true,_COLUMN_,_FILE_,_FUNCTION_,_LINE_
可同時聲明多個變數,不同類型
var a = 10,b:String,c = "renhairui"
let myName = "renhairui",myAge = "26"
println() 比print()輸出內容後會換行
字串插值string interpolation : 變數名/常量名 放在圓括弧內,前面使用反斜線進行轉義。例如:println("我的名字是:\(myName),我的年齡是:\(myAge)")
一般盡量使用Int型,會提高通用性,可以訪問不同整型的min, max屬性來擷取最小最大值,例如:println(Int32.min)
避免使用不帶正負號的整數,提高代碼複用性,避免不同數實值型別之間轉換改變值。
並且建議從小向大變 Int8->Int16->Int32->Int64->Float->Double
Bool 只能是true,false 和oc中完全不同
元組 tuple :用圓括弧把多個值組合成一個複合值,可以是任意類型。
var health = (180,70,"良好") //自動推斷類型 (Int,Int,String)
可以嵌套 var test (20,(15,"swift")) 通過下標訪問,\(health.0) \(test.1.0)
也可以拆分成單個的 var (height,weight,status) = health; println("身高是:\(height) ,體重:\(weight),狀態:\(status)")
不需要某個的時候,可以用_底線 ,忽略 let(a,b,_) = health
可以使用key value 命名, var health = (height:180,體重:70,status‘良好")
key 賦值時,順序可以調換。 通過名字訪問: \(health.height)
可選類型 處理值缺失的情況 類型? Sting?
var str = "renhairui"
var num :Int? = str.toInt() //轉換失敗,是nil,值缺失
區別:OC中nil代表 不存在的對象指標 ,swift中完全不同!
只有可選類型的變數常量才能接受nil
var age:Int = nil //錯誤的!
強制解析 forced unwrapping 為了擷取可選類型的值,名後加!,進行解析,表示:已知已有值,提取值
var str:String? = "renhairui"
var s:String = st!
var n1:Int? = 10
var n2:Int? = 5
let sum = n1!+n2! // 必須使用強制解析,否則編譯無法通過
為了確保強制解析不會導致運行崩潰,提供if判斷
if str != nil
{
var s = str!
}else{
println("不能強制解析")
}
if n1 !=nil && n2 !=nil{
let sum = n1! +n2!
}
可選綁定 optional binding 用於判斷可選類型是否有值,用在If while中判斷
var str : String? = "renhairui"
if var tmp = str{
println(tmp)
}
隱式可選類型 任意已有類型後邊加!表示可選類型
區別:
Int! 接受 Int值和nil
Int 只能接受Int值
Int?接受Int和nil 但是要強制解析
作用:用於定義那些被賦值之後 不會重新變為nil的變數
用的時候也需要判斷 if let temp = name {}
類型別名 typealias typealias Counter = Int //以後使用Counter完全代表Int \(Counter.max)
Unicode形式 \u{2666} 表示 ♦?
var str = String() //建立Null 字元串
var strCopy = String(count:5,repeatedValue:Character("f")) //建立5個重複f
let name = "renhairui"
var info = name + "is a good man!"
println(info)
var subStr = name.substringWithRange(NsMakeRange(3,6)) // 從3開始,連續6個,輸出hairui
swift的Sting 是實值型別,複製執行個體的副本傳遞,不是OC的 *
info.removeAll //清空
countElements(info) //計算字元數量,unicode也可以
遍曆
for a in info
{
println(a)
}
比較字串: 相等: ==,首碼相等:hasPrefix(),尾碼相等:hasSuffix()
var hasOrNo:Bool = name.hasPrefix("ren") //name = "renhairui"
記錄:swift學習筆記0-1