Swift酒汽秘壇縮殻?30蛍嶝螺廬Swift
<貧匯准
和匯准>
宥械栖傍?園殻囂冱縮殻嶄議及匯倖殻會哘乎壓徳鳥貧嬉咫“Hello, world”。壓 Swift 嶄?辛參喘匯佩旗鷹糞孖?
println("hello, world")
泌惚低亟狛 C 賜宀 Objective-C 旗鷹?椎低哘乎載母呂宸嶽侘塀——壓 Swift 嶄?宸佩旗鷹祥頁匯倖頼屁議殻會。低音俶勣葎阻補秘補竃賜宀忖憲堪侃尖擬秘匯倖汽鏡議垂。畠蕉恬喘囃嶄議旗鷹氏瓜徭強輝恂殻會議秘笥泣?侭參低匆音俶勣main痕方。低揖劔音俶勣壓耽倖囂鞘潤硫亟貧蛍催。
宸倖縮殻氏宥狛匯狼双園殻箭徨栖斑低斤 Swift 嗤兜化阻盾?泌惚低嗤焚担音尖盾議仇圭匆音喘毅伉——販採云嫗初府議坪否脅氏壓朔中議嫗准嶄峋聾讐盾。
泌惚兜兵峙短嗤戻工怎校議佚連?賜宀短嗤兜兵峙??椎低俶勣壓延楚朔中蕗苧窃侏?喘丹催蛍護。
低辛參匯軟聞喘if才let栖侃尖峙髪払議秤趨。嗤乂延楚議峙頁辛僉議。匯倖辛僉議峙辛嬬頁匯倖醤悶議峙賜宀頁nil?燕幣峙髪払。壓窃侏朔中紗匯倖諒催栖炎芝宸倖延楚議峙頁辛僉議。
switch屶隔販吭窃侏議方象參式光嶽曳熟荷恬——音叙叙頁屁方參式霞編屢吉。
低辛參聞喘for-in栖演煽忖灸?俶勣曾倖延楚栖燕幣耽倖囚峙斤。
低辛參宥狛歌方了崔遇音頁歌方兆忖栖哈喘歌方——宸倖圭隈壓掲械玉議液淫嶄掲械嗤喘。輝匯倖液淫恬葎恷朔匯倖歌方勧公匯倖痕方議扮昨?万辛參岷俊効壓凄催朔中。
泌惚低俶勣壓評茅斤嵆岻念序佩匯乂賠尖垢恬?聞喘deinit幹秀匯倖裂更痕方。
徨窃議協吶圭隈頁壓万断議窃兆朔中紗貧幻窃議兆忖?喘丹催蛍護。幹秀窃議扮昨旺音俶勣匯倖炎彈議功窃?侭參低辛參策待幻窃。
徨窃泌惚勣嶷亟幻窃議圭隈議三?俶勣喘override炎芝——泌惚短嗤耶紗override祥嶷亟幻窃圭隈議三園咎匂氏烏危。園咎匂揖劔氏殊霞override炎芝議圭隈頁倦鳩糞壓幻窃嶄。
廣吭EquilateralTriangle窃議更夛匂峇佩阻眉化?
曳泌?和中議窃鳩隠眉叔侘議円海悳頁才屎圭侘議円海屢揖。
聞喘toRaw才fromRaw痕方栖壓圻兵峙才旦訟峙岻寂序佩廬算。
聞喘struct栖幹秀匯倖潤更悶。潤更悶才窃嗤載謹屢揖議仇圭?曳泌圭隈才更夛匂。万断潤更悶岻寂恷寄議匯倖曝艶祥頁 潤更悶頁勧峙?窃頁勧哈喘。
箭泌?深打貫捲暦匂資函晩竃才晩鯛議扮寂。捲暦匂氏卦指屎械潤惚賜宀危列佚連。
聞喘extension栖葎孖嗤議窃侏耶紗孔嬬?曳泌耶紗匯倖柴麻奉來議圭隈。低辛參聞喘制婢栖公販吭窃侏耶紗亅咏?封崛頁低貫翌何垂賜宀崇尺嶄擬秘議窃侏。
println("hello, world")
泌惚低亟狛 C 賜宀 Objective-C 旗鷹?椎低哘乎載母呂宸嶽侘塀——壓 Swift 嶄?宸佩旗鷹祥頁匯倖頼屁議殻會。低音俶勣葎阻補秘補竃賜宀忖憲堪侃尖擬秘匯倖汽鏡議垂。畠蕉恬喘囃嶄議旗鷹氏瓜徭強輝恂殻會議秘笥泣?侭參低匆音俶勣main痕方。低揖劔音俶勣壓耽倖囂鞘潤硫亟貧蛍催。
宸倖縮殻氏宥狛匯狼双園殻箭徨栖斑低斤 Swift 嗤兜化阻盾?泌惚低嗤焚担音尖盾議仇圭匆音喘毅伉——販採云嫗初府議坪否脅氏壓朔中議嫗准嶄峋聾讐盾。
廣吭?葎阻資誼恷挫議悶刮?壓 Xcode 輝嶄聞喘旗鷹圓誓孔嬬。旗鷹圓誓孔嬬辛參斑低園辞旗鷹旺糞扮心欺塰佩潤惚。
酒汽峙
聞喘let栖蕗苧械楚?聞喘var栖蕗苧延楚。匯倖械楚議峙壓園咎扮旺音俶勣資函?徽頁低峪嬬葎万験峙匯肝。匆祥頁傍低辛參喘械楚栖燕幣宸劔匯倖峙?低峪俶勣畳協匯肝?徽頁俶勣聞喘載謹肝。var myVariable = 42 myVariable = 50 let myConstant = 42械楚賜宀延楚議窃侏駅倬才低験公万断議峙匯劔。隼遇?蕗苧扮窃侏頁辛僉議?蕗苧議揖扮験峙議三?園咎匂氏徭強容僅窃侏。壓貧中議箭徨嶄?園咎匂容僅竃myVariable頁匯倖屁方?integer?咀葎万議兜兵峙頁屁方。
泌惚兜兵峙短嗤戻工怎校議佚連?賜宀短嗤兜兵峙??椎低俶勣壓延楚朔中蕗苧窃侏?喘丹催蛍護。
let implicitInteger = 70 let implicitDouble = 70.0 let explicitDouble: Double = 70
膳楼?幹秀匯倖械楚??塋瞬原╂猥洋?Float旺峺協兜兵峙葎4。峙喟垓音氏瓜咨塀廬算葎凪麿窃侏。泌惚低俶勣委匯倖峙廬算撹凪麿窃侏?萩?塋竣Ĺ察?
let label = "The width is" let width = 94 let widthLabel = label + String(width)
膳楼?評茅恷朔匯佩嶄議String?危列戻幣頁焚担?嗤匯嶽厚酒汽議委峙廬算撹忖憲堪議圭隈?委峙亟欺凄催嶄?旺拝壓凄催岻念亟匯倖郡弍顧。箭泌?
let apples = 3 let oranges = 5 let appleSummary = "I have \(apples) apples." let fruitSummary = "I have \(apples + oranges) pieces of fruit."
膳楼?聞喘\()栖委匯倖検泣柴麻廬算撹忖憲堪?旺紗貧蝶繁議兆忖?才麿嬉倖孃柵。聞喘圭凄催[]栖幹秀方怏才忖灸?旺聞喘和炎賜宀囚?key?栖恵諒圷殆。
var shoppingList = ["catfish", "water", "tulips", "blue paint"] shoppingList[1] = "bottle of water" var occupations = [ "Malcolm": "Captain", "Kaylee": "Mechanic", ] occupations["Jayne"] = "Public Relations"勣幹秀匯倖腎方怏賜宀忖灸?聞喘兜兵晒囂隈。
let emptyArray = String[]() let emptyDictionary = Dictionary<String, Float>()泌惚窃侏佚連辛參瓜容僅竃栖?低辛參喘[]才[:]栖幹秀腎方怏才腎忖灸——祥崧低蕗苧延楚賜宀公痕方勧歌方議扮昨匯劔。
shoppingList = [] // 肇剛瞬旺択泣叫廉
陣崙送
聞喘if才switch栖序佩訳周荷恬?聞喘for-in、for、while才do-while栖序佩儉桟。淫骨訳周才儉桟延楚凄催辛參福待?徽頁囂鞘悶議寄凄催頁駅倬議。
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
teamScore
壓if囂鞘嶄?訳周駅倬頁匯倖下櫛燕器塀——崧if score { ... }宸劔議旗鷹頁危列議。低辛參匯軟聞喘if才let栖侃尖峙髪払議秤趨。嗤乂延楚議峙頁辛僉議。匯倖辛僉議峙辛嬬頁匯倖醤悶議峙賜宀頁nil?燕幣峙髪払。壓窃侏朔中紗匯倖諒催栖炎芝宸倖延楚議峙頁辛僉議。
var optionalString: String? = "Hello"
optionalString == nil
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
膳楼?委optionalName個撹nil?greeting氏頁焚担?耶紗匯倖else囂鞘?輝optionalName頁nil扮公greeting験匯倖音揖議峙。泌惚延楚議辛僉峙頁nil?訳周氏登僅葎false?寄凄催嶄議旗鷹氏瓜柳狛。泌惚音頁nil?氏繍峙験公let朔中議械楚?宸劔旗鷹翠嶄祥辛參聞喘宸倖峙阻。
switch屶隔販吭窃侏議方象參式光嶽曳熟荷恬——音叙叙頁屁方參式霞編屢吉。
let vegetable = "red pepper"
switch vegetable {
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
let vegetableComment = "Is it a spicy \(x)?"
default:
let vegetableComment = "Everything tastes good in soup."
}
膳楼?評茅default囂鞘?心心氏嗤焚担危列?塰佩switch嶄謄塘欺議徨鞘岻朔?殻會氏曜竃switch囂鞘?旺音氏写偬?和塰佩?侭參音俶勣壓耽倖徨鞘潤硫亟break。
低辛參聞喘for-in栖演煽忖灸?俶勣曾倖延楚栖燕幣耽倖囚峙斤。
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
largest
膳楼?耶紗総匯倖延楚栖芝村陳嶽窃侏議方忖頁恷寄議。聞喘while栖嶷鹸塰佩匯粁旗鷹岷欺音諾怎訳周。儉桟訳周辛參壓蝕遊匆辛參壓潤硫。
var n = 2
while n < 100 {
n = n * 2
}
n
var m = 2 do {
m = m * 2
} while m < 100
m
低辛參壓儉桟嶄聞喘..栖燕幣袈律?匆辛參聞喘勧由議亟隈?曾宀頁吉勺議?
var firstForLoop = 0
for i in 0..3 {
firstForLoop += i
}
firstForLoop
var secondForLoop = 0
for var i = 0; i < 3; ++i {
secondForLoop += 1
} secondForLoop
聞喘..幹秀議袈律音淫根貧順?泌惚?淫根議三俶勣聞喘...。痕方才液淫
聞喘func栖蕗苧匯倖痕方?聞喘兆忖才歌方栖距喘痕方。聞喘->栖峺協痕方卦指峙。
func greet(name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")
膳楼?評茅day歌方?耶紗匯倖歌方栖燕幣書爺郭阻焚担怜傾。聞喘匯倖圷怏栖卦指謹倖峙。
func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}
getGasPrices()
痕方議歌方方楚頁辛延議?喘匯倖方怏栖資函万断?
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12)
膳楼?亟匯倖柴麻歌方峠譲峙議痕方。痕方辛參廼耗。瓜廼耗議痕方辛參恵諒翌迦痕方議延楚?低辛參聞喘廼耗痕方栖嶷更匯倖湊海賜宀湊鹸墫議痕方。
func returnFifteen() -> Int {
var y = 10 func add() {
y += 5
}
add()
return y
}
returnFifteen()
痕方頁匯吉巷酎?宸吭龍彭痕方辛參恬葎総匯倖痕方議卦指峙。
func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
痕方匆辛參輝恂歌方勧秘総匯倖痕方。
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanTen)
痕方糞縞貧頁匯嶽蒙歩議液淫?低辛參聞喘{}栖幹秀匯倖停兆液淫。聞喘in栖蛍護歌方旺卦指窃侏。
numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
})
膳楼?嶷亟液淫?斤侭嗤謎方卦指0.嗤載謹嶽幹秀液淫議圭隈。泌惚匯倖液淫議窃侏厮岑?曳泌恬葎匯倖指距痕方?低辛參策待歌方議窃侏才卦指峙。汽倖囂鞘液淫氏委万囂鞘議峙輝恂潤惚卦指。
低辛參宥狛歌方了崔遇音頁歌方兆忖栖哈喘歌方——宸倖圭隈壓掲械玉議液淫嶄掲械嗤喘。輝匯倖液淫恬葎恷朔匯倖歌方勧公匯倖痕方議扮昨?万辛參岷俊効壓凄催朔中。
sort([1, 5, 3, 12, 2]) { 0ドル > 1ドル }
斤嵆才窃
聞喘class才窃兆栖幹秀匯倖窃。窃嶄奉來議蕗苧才械楚、延楚蕗苧匯劔?率匯議曝艶祥頁万断議貧和猟頁窃。揖劔?圭隈才痕方蕗苧匆匯劔。
class Shape {
var numberOfSides = 0
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
膳楼?聞喘let耶紗匯倖械楚奉來?壅耶紗匯倖俊辺匯倖歌方議圭隈。勣幹秀匯倖窃議糞箭?壓窃兆朔中紗貧凄催。聞喘泣囂隈栖恵諒糞箭議奉來才圭隈。
var shape = Shape() shape.numberOfSides = 7 var shapeDescription = shape.simpleDescription()宸倖井云議Shape窃髪富阻匯乂嶷勣議叫廉?匯倖更夛痕方栖兜兵晒窃糞箭。聞喘init栖幹秀匯倖更夛匂。
class NamedShape {
var numberOfSides: Int = 0
var name: String
init(name: String) {
self.name = name
}
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
廣吭self瓜喘栖曝艶糞箭延楚。輝低幹秀糞箭議扮昨?崧勧秘痕方歌方匯劔公窃勧秘更夛匂議歌方。耽倖奉來脅俶勣験峙——涙胎頁宥狛蕗苧?祥崧numberOfSides?珊頁宥狛更夛匂?祥崧name?。泌惚低俶勣壓評茅斤嵆岻念序佩匯乂賠尖垢恬?聞喘deinit幹秀匯倖裂更痕方。
徨窃議協吶圭隈頁壓万断議窃兆朔中紗貧幻窃議兆忖?喘丹催蛍護。幹秀窃議扮昨旺音俶勣匯倖炎彈議功窃?侭參低辛參策待幻窃。
徨窃泌惚勣嶷亟幻窃議圭隈議三?俶勣喘override炎芝——泌惚短嗤耶紗override祥嶷亟幻窃圭隈議三園咎匂氏烏危。園咎匂揖劔氏殊霞override炎芝議圭隈頁倦鳩糞壓幻窃嶄。
class Square: NamedShape {
var sideLength: Double
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double {
return sideLength * sideLength
}
override func simpleDescription() -> String {
return "A square with sides of length \(sideLength)."
}
}
let test = Square(sideLength: 5.2, name: "my test square")
test.area()
test.simpleDescription()
膳楼?幹秀NamedShape議総匯倖徨窃Circle?更夛匂俊辺曾倖歌方?匯倖頁磯抄匯倖頁兆各?糞孖area才describe圭隈。奉來辛參嗤 getter 才 setter 。
class EquilateralTriangle: NamedShape {
var sideLength: Double = 0.0
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 3
}
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
override func simpleDescription() -> String {
return "An equilateral triagle with sides of length \(sideLength)."
}
}
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
triangle.perimeter
triangle.perimeter = 9.9
triangle.sideLength
壓perimeter議 setter 嶄?仟峙議兆忖頁newValue。低辛參壓set岻朔?塋承追蕚智燦?蛼屐?廣吭EquilateralTriangle窃議更夛匂峇佩阻眉化?
- 譜崔徨窃蕗苧議奉來峙
- 距喘幻窃議更夛匂
- 個延幻窃協吶議奉來峙。凪麿議垢恬曳泌距喘圭隈、getters才setters匆辛參壓宸倖竣粁頼撹。
曳泌?和中議窃鳩隠眉叔侘議円海悳頁才屎圭侘議円海屢揖。
class TriangleAndSquare {
var triangle: EquilateralTriangle {
willSet {
square.sideLength = newValue.sideLength
}
}
var square: Square {
willSet {
triangle.sideLength = newValue.sideLength
}
}
init(size: Double, name: String) {
square = Square(sideLength: size, name: name)
triangle = EquilateralTriangle(sideLength: size, name: name)
}
}
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")
triangleAndSquare.square.sideLength
triangleAndSquare.triangle.sideLength
triangleAndSquare.square = Square(sideLength: 50, name: "larger square")
triangleAndSquare.triangle.sideLength
窃嶄議圭隈才匯違議痕方嗤匯倖嶷勣議曝艶?痕方議歌方兆峪壓痕方坪何聞喘?徽頁圭隈議歌方兆俶勣壓距喘議扮昨?塋祝誼?┳鎣傍斷燦?諒釱?Dh惑蘓氐贈iii酬┻腸諒鏆?曜迤攘酬24擴慎鎮蛼嶢姿??珊鏞穢何敏垓38綉擽髎?蛼孱u盡?蛼岷屍痴攘酬24擴拭?
class Counter {
var count: Int = 0
func incrementBy(amount: Int, numberOfTimes times: Int) {
count += amount * times
}
}
var counter = Counter()
counter.incrementBy(2, numberOfTimes: 7)
侃尖延楚議辛僉峙扮?低辛參壓荷恬?曳泌圭隈、奉來才徨重云?岻念紗?。泌惚?岻念議峙頁nil??朔中議叫廉脅氏瓜策待?旺拝屁倖燕器塀卦指nil。倦夸??岻朔議叫廉脅氏瓜塰佩。壓宸曾嶽秤趨和?屁倖燕器塀議峙匆頁匯倖辛僉峙。let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square") let sideLength = optionalSquare?.sideLength
旦訟才潤更悶
聞喘enum栖幹秀匯倖旦訟。祥崧窃才凪麿侭嗤凋兆窃侏匯劔?旦訟辛參淫根圭隈。
enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
func simpleDescription() -> String {
switch self {
case .Ace:
return "ace"
case .Jack:
return "jack"
case .Queen:
return "queen"
case .King:
return "king"
default:
return String(self.toRaw())
}
}
}
let ace = Rank.Ace
let aceRawValue = ace.toRaw()
膳楼?亟匯倖痕方?宥狛曳熟万断議圻兵峙栖曳熟曾倖Rank峙。壓貧中議箭徨嶄?旦訟圻兵峙議窃侏頁Int?侭參低峪俶勣譜崔及匯倖圻兵峙。複和議圻兵峙氏梓孚乏會験峙。低匆辛參聞喘忖憲堪賜宀検泣方恬葎旦訟議圻兵峙。
聞喘toRaw才fromRaw痕方栖壓圻兵峙才旦訟峙岻寂序佩廬算。
if let convertedRank = Rank.fromRaw(3) {
let threeDescription = convertedRank.simpleDescription()
}
旦訟議撹埀峙頁糞縞峙?旺音頁圻兵峙議総匯嶽燕器圭隈。糞縞貧?泌惚圻兵峙短嗤吭吶?低音俶勣譜崔。
enum Suit {
case Spades, Hearts, Diamonds, Clubs
func simpleDescription() -> String {
switch self {
case .Spades:
return "spades"
case .Hearts:
return "hearts"
case .Diamonds:
return "diamonds"
case .Clubs:
return "clubs"
}
}
}
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()
膳楼?公Suit耶紗匯倖color圭隈?斤spades才clubs卦指“black”?斤hearts才diamonds卦指“red”。廣吭?嗤曾嶽圭塀辛參哈喘Hearts撹埀?公hearts械楚験峙扮?旦訟撹埀Suit.Hearts俶勣喘畠兆栖哈喘?咀葎械楚短嗤?塋瞬原╂猥諭T?switch戦?旦訟撹埀聞喘抹亟.Hearts栖哈喘?咀葎self議峙厮将岑祇頁匯倖suit。厮岑延楚窃侏議秤趨和低辛參聞喘抹亟。
聞喘struct栖幹秀匯倖潤更悶。潤更悶才窃嗤載謹屢揖議仇圭?曳泌圭隈才更夛匂。万断潤更悶岻寂恷寄議匯倖曝艶祥頁 潤更悶頁勧峙?窃頁勧哈喘。
struct Card {
var rank: Rank
var suit: Suit
func simpleDescription() -> String {
return "The \(rank.simpleDescription()) of \
(suit.simpleDescription())"
}
}
let threeOfSpades = Card(rank: .Three, suit: .Spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription()
膳楼?公Card耶紗匯倖圭隈?幹秀匯険頼屁議橡針兎旺委耽嫖兎議rank才suit斤哘軟栖。匯倖旦訟撹埀議糞箭辛參嗤糞箭峙。屢揖旦訟撹埀議糞箭辛參嗤音揖議峙。幹秀糞箭議扮昨勧秘峙軸辛。糞箭峙才圻兵峙頁音揖議?旦訟撹埀議圻兵峙斤噐侭嗤糞箭脅頁屢揖議?遇拝低頁壓協吶旦訟議扮昨譜崔圻兵峙。
箭泌?深打貫捲暦匂資函晩竃才晩鯛議扮寂。捲暦匂氏卦指屎械潤惚賜宀危列佚連。
enum ServerResponse {
case Result(String, String)
case Error(String)
}
let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")
switch success {
case let .Result(sunrise, sunset):
let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
case let .Error(error):
let serverResponse = "Failure... \(error)"
}
膳楼?公ServerResponse才switch耶紗及眉嶽秤趨。廣吭泌採貫ServerResponse嶄戻函晩幅才晩鯛扮寂。
俊笥才制婢
聞喘protocol栖蕗苧匯倖俊笥。
protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust() }
窃、旦訟才潤更悶脅辛參糞孖俊笥。
class SimpleClass: ExampleProtocol {
var simpleDescription: String = "A very simple class."
var anotherProperty: Int = 69105
func adjust() {
simpleDescription += " Now 100% adjusted."
}
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription
struct SimpleStructure: ExampleProtocol {
var simpleDescription: String = "A simple structure" mutating func adjust() {
simpleDescription += " (adjusted)"
}
}
var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription
膳楼?亟匯倖糞孖宸倖俊笥議旦訟。廣吭蕗苧SimpleStructure扮昨mutating購囚忖喘栖炎芝匯倖氏俐個潤更悶議圭隈。SimpleClass議蕗苧音俶勣炎芝販採圭隈咀葎窃嶄議圭隈将械氏俐個窃。
聞喘extension栖葎孖嗤議窃侏耶紗孔嬬?曳泌耶紗匯倖柴麻奉來議圭隈。低辛參聞喘制婢栖公販吭窃侏耶紗亅咏?封崛頁低貫翌何垂賜宀崇尺嶄擬秘議窃侏。
extension Int: ExampleProtocol {
var simpleDescription: String {
return "The number \(self)"
}
mutating func adjust() {
self += 42
}
}
7.simpleDescription
膳楼?公Double窃侏亟匯倖制婢?耶紗absoluteValue孔嬬。低辛參崧聞喘凪麿凋兆窃侏匯劔聞喘俊笥兆——箭泌?幹秀匯倖嗤音揖窃侏徽頁脅糞孖匯倖俊笥議斤嵆鹿栽。輝低侃尖窃侏頁俊笥議峙扮?俊笥翌協吶議圭隈音辛喘。
let protocolValue: ExampleProtocol = a // protocolValue.anotherProperty protocolValue.simpleDescription // Uncomment to see the error軸聞protocolValue延楚塰佩扮議窃侏頁simpleClass?園咎匂氏委万議窃侏輝恂ExampleProtocol。宸燕幣低音嬬距喘窃壓万糞孖議俊笥岻翌糞孖議圭隈賜宀奉來。
刑侏
壓錫凄催戦亟匯倖兆忖栖幹秀匯倖刑侏痕方賜宀窃侏。
func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] {
var result = ItemType[]()
for i in 0..times {
result += item
}
return result
}
repeat("knock", 4)
低匆辛參幹秀刑侏窃、旦訟才潤更悶。
// Reimplement the Swift standard library's optional type
enum OptionalValue<T> {
case None case Some(T)
}
var possibleInteger: OptionalValue<Int> = .None
possibleInteger = .Some(100)
壓窃侏兆朔中聞喘where栖峺協匯倖俶箔双燕——箭泌?勣尫協糞孖匯倖亅咏議窃侏?俶勣尫協曾倖窃侏勣屢揖?賜宀尫協匯倖窃駅倬嗤匯倖蒙協議幻窃。
func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool {
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
}
anyCommonElements([1, 2, 3], [3])
膳楼?俐個anyCommonElements痕方栖幹秀匯倖痕方?卦指匯倖方怏?坪否頁曾倖會双議慌嗤圷殆。酒汽軟需?低辛參策待where?峪壓丹催朔中亟俊笥賜宀窃兆。<T: Equatable>才<T where T: Equatable>頁吉勺議。
<貧匯准
和匯准>