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...