swift2 0 學習筆記Twenty

2021-07-14 02:09:04 字數 3893 閱讀 6298

import

uikit

class

viewcontroller:

uiviewcontroller

//型別約束

//func somefunction(somet:t,someu:u) //

第乙個型別引數

t,有乙個需要

t必須是

someclass

子類的型別約束;第二個型別引數

u,需要

u必須遵循

someprotocol

協議的型別約束。

letstrings = [

"cat"

,"dog"

,"llama"

,"hhhh"

,"oooo"]

iflet

foundindex =

findstringindex

(strings,

"dog")

//the index of dog is 1 if

letdoubleindex =

findindex

([3.14159,0.1,0.25], 0.25)

//the index of 0.25 is 2 if

letstringindex =

findindex

(["mike"

,"malcolm"

,"andrea"

], "andrea"

)//the index of andrea is 2

//關聯型別 //

當定義乙個協議時,有的時候宣告乙個或多個關聯型別作為協議定義的一部分是非常有用的。乙個關聯型別作為協議的一部分,給定了型別的乙個佔位名(或別名)。關聯型別被指定為

typealias

關鍵字

//where 語句

//型別約束能夠確保型別符合泛型函式或類的定義約束。

varstackofstrings2 =

mystack

<

string

>()

stackofstrings2.

push

("one")

stackofstrings2.

push

("two")

stackofstrings2.

push

("three")

letarrayofstrings = [

"one"

,"two"

,"three"]

ifallitemsmatch

(stackofstrings2, anothercontainer: arrayofstrings)

else

//all items match }

//swift

標準庫中定義了乙個

equatable

協議,該協議要求任何遵循的型別實現等式符

(==)

和不等式符

(!=)

對任何倆個該型別進行比較。

//findindex

中這個單個型別引數寫做:

t: equatable,

也就意味著「任何

t型別都遵循

equatable協議」

func

findindexequatable

>(array:[t],

_valuetofind:

t)->

int? }

return

nil }

func

findstringindex(array:[

string

], _

valuetofind:

string

)->

int? }

return

nil }

func

swaptwovalues(

inouta:t

,inoutb:t

) func

swaptwoints(

inout

a:int

,inout

b:int)

func

swaptwostrings(

inout

a:string

,inout

b:string)

} //使用

where

語句,緊跟在型別引數列表後面,

where

語句後跟乙個或多個針對關聯型別的約束,以及乙個或多個型別和關聯型別間的等價關係,

func

allitemsmatch container

,c2:

container

wherec1.

itemtype

: equatable , c1.

itemtype

==c2

.itemtype

> (somecontainer:

c1,anothercontainer:

c2)->

bool

fori in

0..count }

//如果所有元素檢查都相同則返回

true

return

true }

extension

array

: container

{}//swift

的array

已經提供

方法,乙個

count

屬性和通過下標來查詢乙個自己的元素。這三個功能都達到

container

協議的要求。也就意味著可以擴充套件

array

去遵循container

協議,定義了這個擴充套件後,可以將任何

array

當作container

來使用。

// 關聯型別例項

protocol

container

subscript

(i:int

)->

itemtype }

struct

mystack:

container

mutating

func

pop()->t

mutating

funct)

varcount :

int

subscript

(i:int

)->t

} struct

myintstack:

container

mutating

func

pop()->

int

//遵循

container

協議的實現

typealias

itemtype =

int//

將抽象的

itemtype

型別轉換為具體的

int型別

mutating

func

int)

varcount :

int

subscript

(i:int

)->

int }

extension

stack }

//泛型版本

struct

stack

mutating

func

pop() -> t

} //非泛型版本的棧,

int值型的棧

struct

intstack

mutating

func

pop()->

int

}

swift2 0 學習筆記Two

var myarray 1,4,6,5,2 var sc 0 for str in myarray sc 1 print myarray,string sc 1,4,16,15,2 5 let optionalstr string?hello world print optionalstr nil ...

swift2 0 學習筆記four

override func viewdidload one two three let mychatacters character d l g let str string mychatacters print str dlg 建立乙個帶有預設值的陣列 let tt double count 6 ...

swift2 0 學習筆記Thirteen

import uikit class viewcontroller uiviewcontroller else 該閉包引用了 self 即強引用了 htmlelement 例項,lazy var ashtml void string 該變數又強引用了閉包 paragraph nil 不會觸發 dei...