記錄:swift學習筆記0-1

來源:互聯網
上載者:User

標籤:

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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.