自學Swift 斯坦福筆記整理 第四天開始

2021-07-02 12:27:20 字數 4815 閱讀 4504

突然發現史丹福大學的教程,就開始跟著學習.

在swift中,字典和陣列不屬於類,屬於結構體,方法傳值傳遞的是值而不是位址.

swift 結構體和類的區別.類可以繼承,結構體傳值是傳的值,類傳遞的是引用.

傳遞陣列去方法裡.因為引數也為只可讀不可修改的let型,所以需要在內部定義乙個var變數來取值進行陣列內的修改

複製只要不進行修改都不會進行複製,他有乙個不知道哪來的指標指向它,直到你修改他,swift才會真的複製

_在swift中表示我不關心這個的通用表達

//protocol

printable 可以對class或者struct有效  這個在enum冒號後是告訴enum需要自己實現這個protocol的內容

optional就是enum

enum optional

例如let x:string? = nil

…islet x = optional.none

let x:string? = 「hello"

…islet x = optional.some(「hellp」)

array

var a = array()

var a = [string]()

dictionary

var pac10teamrankings = dictionary()

…isvar pac10teamrankings = [string:int]()

for (key,value) in pac10teamrankings

range(三個點…兩個點加小於符號)

struct range

let array = [1,2,3,4,5,6]

let subarray1 = array[2…3]

let subarray2 = array[2..<3]

for i in [27…103] {}

nsobject是所有類的父類

nsnumber     //只是乙個裝數字的類

let n = nsnumber(35.5)

let intversion = n.intvalue

nsdate//儲存日期,也可以讓你獲取當前日期和時間

class calculatorbrain{}     //引用型別

struct vertex{}     //值型別

enum op{}

三者都可以放方法,屬性等

不同,類有繼承的性質 方法

override //重寫

final //不能被重寫

static(class) func abs(d:double) -> double //靜態放啊發

properties(屬性) observe

willset 在設定property值之前被呼叫 newvalue變數這是property將要被設定的新的值

didset 在設定property值之後被呼叫 oldvalue變數這是property被設定之前的值

lazy 他只會在被用到的時候才會初始化 特性依然滿足 所有屬性必須初始化的原則 只有var才可以使用lazy初始化這個特性

init初始化

designated initializer 不能有convenience在他的前面他只能呼叫父類的designater initalizer 必須在呼叫父類的init時候先初始化直接所有的property

convenience initializer 必須而且只能呼叫本類的designated initializer這類初始化函式不能呼叫任何父類的初始化函式

failble init

init?(arg1:type1,…){} 如果失敗的話可能會返回nil

anyobejct主要用於相容現在oc api和ios**

anyobject的意思是,指向乙個物件的指標,乙個類的例項

as 強制轉換anyobject

as? 會返回乙個可選的

is 檢查他是否是乙個當前指定類

functions

array

+= [t]     //+為乙個聯結器.後面必須為乙個陣列不能為單個值

first -> t?     //返回第乙個元素

last -> t?     //返回最後乙個元素

var a = [a,b,c]

insert(t,atindex:int) 

splice(array,atindex:int)//這個方法為將另外乙個array加入到你的array的中間位置  a.splice([d,e],atindex:1) [a,d,e,b,c]

removeatindex(int)

removerange(range)

replacerange(range,[t]) a = [x,y,z,b] //被替換的元素不一定要和原來的替換數量相同

sort(isorderedbefore:(t,t) -> bool) //可以對乙個陣列排序,排序方法接受乙個函式作為引數乙個決定兩個元素誒放在前面的函式 a.sort 可以寫成這種閉包函式

filter(includeelement:(t) -> bool) -> [t] //這方法將你所有不想要的元素過濾掉然後返回給你那個過濾後的array

map(transform:(t) -> u ) -> [u]//這將原來的ayyar中的每乙個元素對映到乙個新的array 

let stringified:[string] = [1,2,3].map //可以將乙個int陣列對映到乙個string陣列內

//減少乙個值

reduce(initial:u , combine:(u,t) -> u ) -> u//接受乙個引數合格引數是自定的初始值,還有乙個方法作為引數,

let sum:int = [1,2,3].reduce(0)//累加出陣列內全部數的和

string

string.index

通過startindex來獲取這個字串的開始位置

全域性方法advance(string.index,int)

var s = 「hello"

let index = advance(s.startindex,2)

s.splice(「abc」,index)

let num = 「56.25"

if let decimalrange = num.rangeofstring(「.」){

let wholenumberpart = num[num.startindex..string //printable

endindex -> string.index

hasprefix(string) -> bool

hassuffix(string) -> bool

toint() -> int? //no todouble因為轉換為double需要知道小數點後幾位

capitalazedstring -> string

lowercasestring -> string

uppercasestring -> string

join(array) -> string //「,」.join([「1」,」2」,」3」]) = 「1,2,3"

componentsseparatedbystring(string) -> [string] // 「1,2,3」.cabs(「,」) = [「1」,」2」,」3」]

type conversion//轉換

let d:double = 37.5

let f: float = 37.5

let x =int(d)

let xd = double(x)

let cgf = cgfloat(d)

let a = array(「abc」) // a = [「a」,」b」,」c」]

let s = string([「a」,」b」,」c」]) // s = 「abc"

let s = string(73)

let s = 「\(37.5)"

assert(() -> bool,」message」)     是乙個很有用的debug方法他們接受乙個閉包作為其第一引數,

全域性方法 引數均可以接受,array,dictionary,string的引數

let count = countelements(acollection)     //計算數量

let sub = dropfirst(asliceable)     //丟掉第乙個

let sub = droplast(asliceable)     //移除最後乙個

let first = first(acollection)     //第乙個元素

let last = last(acollection)     //最後乙個元素

let prefix = prefix(asliceable,x:int)     //返回從頭開始規定位置的值

let suffix = suffix(asliceable,x:int)      //返回從尾開始規定的值

let reversed:array = reverse(acollection)     //字串反轉

let backwardsstring = string(reverse(s))     

自學Swift 斯坦福筆記整理 八

view controller的生命週期 autolayout 當被segue這個view controller的時候.第一就會準備好 get prepared 另外outlet都被設定好了.就誒下來.view controller顯示在螢幕上 接著消失在螢幕上 而且他的幾何位置 geomtry 可...

斯坦福 ios學習 筆記(一)

一 ios系統架構 1.core os 核心作業系統層,unix核心,主要有電源管理,檔案系統,安全保護等。2.core service 核心服務層,主要有網路請求,多執行緒等操作,資料庫等。4.cocoa touch 觸控層 主要有ui,地圖,警示框,webview,camera。二 關於mvc ...

斯坦福 ios學習 筆記(二)

1.alloc用於記憶體分配,init用於初始化記憶體。2.當我們只是區域性使用數字型別的時候,不要用nsnumber,因為它只是將其傳遞給方法。3.nsninteger和unsigned int是一回事。nsninteger是64位無符號整型。4.作用是讓所以字串為字串物件。5.containso...