Swift燕器塀歌深
念弸燕器才屈蛍燕器辛喘栖壓酒玉囂鞘嶄聞喘塰麻憲。酒汽燕器貫古廷貧讐頁資函峙議恷酒汽圭塀。朔弸燕器才念弸燕器才屈蛍燕器屢貌?脅辛參斑低秀羨厚葎鹸墫議燕器圭塀?箭泌痕方距喘才撹埀資函吉。厘断繍壓云嫗准嶄峋聾盾瞥耽嶽燕器圭塀。
GRAMMAR OF AN EXPRESSION
expression → prefix-expressionbinary-expressionsopt
expression-list → expression expression,expression-list
念弸燕器議聞喘
念弸燕器壓燕器塀議念中紗秘匯倖念弸塰麻憲。念弸塰麻憲朔中諸効燕器塀?宸倖燕器塀辛參尖盾葎念弸塰麻憲議歌方。Swift議炎彈垂戻工阻泌和念弸荷恬憲?
- ++ 徭奐
- -- 徭受
- ! 貸辞掲
- ~ 了塰麻函郡
- + 紗
- - 受
宸乂塰麻憲議聞喘圭隈萩歌深Basic Operators 才 Advanced Operators 屢購嫗准。
茅阻貧中議炎彈垂塰麻憲?輝匯倖延楚恬葎歌方壓痕方距喘嶄勧弓扮?& 辛參慧壓延楚兆念中?宸嶽歌方各葎In-Out Parameters。
GRAMMAR OF A PREFIX EXPRESSION
prefix-expression → prefix-operatoroptpostfix- expression
prefix-expression → in-out-expression
in-out-expression → &identifier
屈蛍燕器議聞喘
屈蛍燕器頁匯嶽繍歌方慧噐塰麻憲曾円議燕器圭塀?万議侘塀泌和?left-hand argument operator right-hand argument
Swift 炎彈垂戻工阻泌和屈蛍荷恬憲?
1) 竹?涙恣嘔屢購?單枠雫 160?
- << 恣卞
- >> 嘔卞
2) 核茅隈?恣屢購?單枠雫150?
- * 核
- / 茅
- % 庁
- &* 核?策待吝竃?
- &/ 茅?策待吝竃?
- &% 庁?策待吝竃?
- & 了塰麻才
3) 紗受隈?恣屢購?單枠雫140?
- + 紗
- - 受
- &+ 吝竃紗
- &- 吝竃受
- | 賜
- ^ 呀賜
4) 曝寂?涙恣嘔屢購?單枠雫135?
- .. 磯蝕曝寂
- ... 液曝寂
5) 廬算?涙恣嘔屢購?單枠雫132?
- is 窃侏殊臥
- as 窃侏廬算
6) 曳熟憲?涙恣嘔屢購來?單枠雫130?
- < 弌噐
- <= 弌噐吉噐
- > 寄噐
- >= 寄噐吉噐
- == 吉噐
- != 音吉噐
- === 屢揖
- !== 音屢揖
- ~= 庁塀謄塘
6) 銭俊憲?恣屢購?單枠雫120?
- && 貸辞嚥
- || 貸辞賜
7) 眉圷塰麻憲?嘔屢購?單枠雫100?
- ? 眉圷塰麻訳周憲
8) 験峙塰麻憲?嘔屢購?單枠雫90?
- = 験峙
- *= 核旺験峙
- /= 茅旺験峙
- %= 函庁旺験峙
- += 徭紗旺験峙
- -= 徭受旺験峙
- <<= 恣卞旺験峙
- >>= 嘔卞旺験峙
- &= 了塰麻才旺験峙
- ^= 了塰麻呀賜旺験峙
- |= 了塰麻賜旺験峙
- &&= 貸辞才旺験峙
- || 貸辞賜旺験峙
宸乂荷恬憲議聞喘圭隈?萩歌孚 児云塰麻憲才互雫塰麻憲。
屈蛍燕器塀議囂隈?廣吭? 壓盾裂議扮昨?屈蛍塰麻憲怏撹議燕器塀繍瓜介盾葎匯倖双燕議侘塀。宸倖双燕繍瓜廬晒葎匯倖會双栖柴麻。箭泌?`2 + 3 * 5` 恷蝕兵瓜尖盾葎匯倖嗤励倖圷殆議双燕?`2`?`+`?`3`?`*`? `5`。隼朔嘉廬算葎會双議侘塀(2+(3*5))。
binary-expression → binary-operatorprefix-expression
binary-expression → assignment-operatorprefix-expression
binary-expression → conditional-operatorprefix-expression
binary-expression → type-casting-operator
binary-expressions → binary-expressionbinary-expressionso
験峙塰麻憲議聞喘
験峙塰麻憲葎燕器塀験嚠仟峙。凪燕器圭塀泌和?燕器塀 = 峙
宥狛宸倖燕器塀?嘔迦議峙繍験嚠恣迦議燕器塀。泌惚恣迦頁匯倖圷殆怏栽?tuple??嘔迦議峙駅倬嚥凪醤嗤屢揖駆圷殆倖方?塋俯謹蚊怏栽?。験峙議荷恬才耽匯何蛍議圷殆匯匯斤哘。箭泌
(a, _, (b, c)) = ("test", 9.45, (12, 3))
// a 頁 "test", b 頁 12, c 頁 3, 9.45 瓜徭強策待阻。
験峙塰麻憲短嗤卦指峙。
眉圷塰麻憲議聞喘
訳周燕器塀 ?泌惚葎寔夸峇佩云燕器塀?泌惚葎邪夸峇佩云燕器塀泌惚訳周燕器塀葎寔?夸峇佩及匯倖燕器塀旺卦指万議峙?倦夸繍峇佩及屈倖燕器塀旺卦指万議峙。短嗤聞喘議燕器塀音氏瓜峇佩。
厚謹議箭徨歌孚眉直塰麻憲。
窃侏廬算塰麻憲議聞喘
匯慌嗤曾嶽窃侏廬算塰麻憲?as 才 is?万断議侘塀泌和?- 燕器塀 as 窃侏
- 燕器塀 as? 窃侏
- 燕器塀 is 窃侏
泌惚宸嶽?蒙協窃侏議廬算撹孔?椎担宸倖燕器塀繍瓜卦指緩蒙協窃侏議匯倖糞箭。灸侏議箭徨頁?貧廬侏。
泌惚宸嶽崧蒙協窃侏議廬算払移?椎担繍哈窟園咎豚危列。
泌惚壓園咎豚廬算撹孔嚥倦音嬬鳩協?宸倖廬算燕器塀繍延葎辛僉峙窃侏。壓塰佩豚?泌惚廬算撹孔?燕器塀議峙繍氏嬉淫撹匯倖辛僉峙旺卦指?倦夸?緩峙繍葎腎?灸侏議箭徨葎?和窃侏廬算。
class SomeSuperType {}
class SomeType: SomeSuperType {}
class SomeChildType: SomeType {}
let s = SomeType()
let x = s as SomeSuperType
// 撹孔?夸卦指峙 SomeSuperType
let y = s as Int
// 払移?園咎豚危列
let z = s as SomeChildType
// 辛嬬壓塰佩豚払移?卦指峙窃侏葎SomeChildType?
斤園咎匂栖傍?聞喘 ```as```栖鳩協窃侏 才 窃侏蕗苧 醤嗤屢揖議恬喘。和中議箭徨辛參傍苧?
let y1 = x as SomeType // 聞喘as燕苧窃侏 let y2: SomeType = x // 聞喘窃侏蕗苧`is`荷恬憲繍忖塰佩扮殊臥燕器塀頁倦葎蒙協窃侏。泌惚頁夸卦指寔?`true`??倦夸卦指邪?`false`?。
壓園咎豚殊臥議潤惚駅倬音鳩協?和中議箭徨頁音栽隈議?
“hello" is String "hello" is Int厚謹購噐窃侏廬算議盾瞥才箭徨萩歌深 [窃侏廬算](for linkage)。
酒汽燕器塀議聞喘
酒汽燕器頁恷児粥議匯窃燕器侘塀。麿断辛參汽鏡聞喘賜嚥凪麿憲催匯軟聞喘栖怏撹念弸燕器?屈蛍燕器?參式朔弸燕器。GRAMMAR OF A PRIMARY EXPRESSION
primary-expression → identifiergeneric-argument-clauseopt
primary-expression → literal-expression
primary-expression → self-expression
primary-expression → superclass-expression
primary-expression → closure-expression
primary-expression → parenthesized-expression
primary-expression → implicit-member-expression
primary-expression → wildcard-expression
猟忖燕器侘塀議聞喘
猟忖燕器喇噸宥議猟忖?箭泌忖憲堪賜方忖??方怏賜忖灸兆?賜宀和中議蒙艶猟忖?Literal | Type | Value
:------------------------: | :-----------: | :--------------------------------------------------------------------:
__FILE__ | String | The name of the file in which it appears
__LINE__ | Int | The line number on which it appears.
__COLUMN__ | Int | The column number in which it begins.
__FUNCTION__ | String | The name of the declaration in which it appears.
壓匯倖痕方坪何?__FUNCTION__祥頁宸倖痕方議兆忖?壓圭隈坪何?万祥頁圭隈兆?壓奉來議get圭隈才set圭隈嶄万祥頁宸倖奉來議兆忖?壓蒙歩撹埀箭泌`init`才`subscript`嶄?万頁購囚忖議兆忖?壓猟周議競蚊?万頁輝念庁侏兆。
方怏議猟忖蕗苧頁匯倖淫根嗤會峙議鹿栽。凪潤更泌和?
[`value1`, `value2`, `...` ]
方怏坪恷朔匯倖燕器塀辛參効鞘催。匯倖腎方怏蕗苧辛參喘匯倖腎議嶄凄催旗燕?[]?。方怏峙議窃侏葎`T[]`?`T`旗燕方怏坪何燕器塀議窃侏。泌惚凪嶄議圷殆窃侏音由匯?T旗燕麿断恷弌階窃。
忖灸議猟忖蕗苧頁匯倖嗤囚峙斤議涙會鹿栽。万嗤泌和燕器?
[`key`:`value1`, `key`:`value2`, `...` ]
忖灸坪恷朔匯倖燕器塀辛參効鞘催。匯倖腎忖灸議蕗苧頁嶄凄催坪紗匯倖丹催?[:]?參緩才腎方怏議燕器侘塀曝蛍。
忖灸議窃侏葎`Dictionary<keytype, ValueType>`?`keytype`頁囚議窃侏?`ValueType`頁凪斤哘峙議窃侏。泌惚忖灸嗤謹嶽窃侏?`keytype`才`ValueType`聞麿断旗燕峙窃侏議恷弌階窃。
GRAMMAR OF A LITERAL EXPRESSION
literal-expression → literal
literal-expression → array-literal dictionary-literal
literal-expression → __FILE__ __LINE__ __COLUMN__ __FUNCTION__
array-literal → [array-literal-itemsopt]
array-literal-items → array-literal-item,opt array-literal-item,array-literal-items
array-literal-item → expression
dictionary-literal → [dictionary-literal-items] [:]
dictionary-literal-items → dictionary-literal-item,opt dictionary-literal-item,dictionary-literal-items
dictionary-literal-item → expression:expression
Self議聞喘
`self`頁斤輝念窃侏賜輝念窃議糞箭議匯嶽?塋述閶叩F篳荒歎酬28舅贈?self self.`member name` self[`subscript index`] self(`initializer arguments`) self.init(`initializer arguments`)壓更夛匂?徨重云賜糞箭圭隈嶄?`self`峺輝念糞箭議哈喘。壓床蓑圭隈賜窃圭隈嶄?`self`峺輝念窃議哈喘。
`self`喘噐輝揖匯恬喘囃贋壓揖兆延楚議扮昨栖苧鳩峺旗參恵諒撹埀延楚?箭泌匝扮延楚嚥撹埀延楚揖兆議秤趨?
class SomeClass {
var greeting: String
init(greeting: String) {
self.greeting = greeting
}
}
壓匯倖mutating窃侏峙議圭隈嶄?低辛參葎匯倖仟議糞箭験峙葎self?箭泌?
struct Point {
var x = 0.0, y = 0.0
mutating func moveByX(deltaX: Double, y deltaY: Double) {
self = Point(x: x + deltaX, y: y + deltaY)
}
}
GRAMMAR OF A SELF EXPRESSION
self-expression → self
self-expression → self.identifier
self-expression → self[expression]
self-expression → self.init
階窃議聞喘
階窃議燕器塀辛參斑匯倖窃嚥万議階窃恢伏購選。泌和箭?super.`member name` super[`subscript index`] super.init(`initializer arguments`)及匯嶽侘塀辛參資函階窃議撹埀。及屈嶽侘塀辛參資函階窃議叔炎圭隈糞孖。及眉嶽侘塀辛參喘栖恵諒階窃議兜兵晒匂。
徨窃聞喘階窃栖糞孖麿断徭失議撹埀?徨重云才兜兵晒匂。
GRAMMAR OF A SUPERCLASS EXPRESSION
superclass-expression → superclass-method-expression superclass-subscript-expression superclass-initializer-expression
superclass-method-expression → super.identifier
superclass-subscript-expression → super[expression]
superclass-initializer-expression → super.init
液淫議聞喘
液淫幹秀匯倖液栽曝寂?壓凪麿囂冱嶄?匆瓜各葎lambda賜停兆痕方。崧圭隈蕗苧匯劔?液淫匆淫根工凪峇佩議囂鞘旺貫緩液栽曝寂函峙。万議侘塀泌和?
{ (`parameters`) -> `return type` in
`statements`
}
宸戦議歌方才侘塀嚥痕方議蕗苧議侘塀屢揖。万醤嗤匯乂厚酒準議亟隈?
- 液淫辛參音亟万議歌方窃侏?卦指峙窃侏。泌惚福待歌方兆才凪窃侏?揖扮福待囂鞘念議`in`購囚忖?泌惚涙隈容僅凪窃侏?夸氏恢伏園咎扮危列。
- 泌惚液淫福待阻万議歌方兆?万議歌方繍氏咨塀議參$紗凪了崔園催凋兆?0,ドル1,ドル2ドル吉吉。
- 峪嗤匯倖燕器塀議液淫潮範卦指燕器塀議峙。輝巓律嗤燕器塀荷恬哈喘窃侏扮?宸倖燕器塀議坪否匆氏歌嚥凪嶄。和中議叱倖液淫頁吉勺議?
myFunction { (x: Int, y: Int) -> Int in return x + y }
myFunction { (x, y) in return x + y }
myFunction { return 0ドル + 1ドル }
myFunction { 0ドル + 1ドル }
購噐液淫壓痕方嶄勧歌議諒籾辛歌深 [痕方距喘議聞喘](for link)。
聞喘廛函双燕?capture list??液淫辛參?塋週諜探縮惷42機Wト〜弍軣敞殲埠仞┷点26陦s俵査天峺遙vi鹵翳撚諒鎣弍蹇5営稱荒致ト〜弍輅隠viii簡皇稱‖垈諒鏆菪?諒鎛猥雄遊技慟祇猥唯d穢憶慚誂?`in`購囚忖。
廛函双燕議耽倖秘笥辛參炎苧`weak`賜`unowned`栖廛函峙議樋哈喘賜涙麼哈喘。
myFunction { print(self.title) } // strong capture
myFunction { [weak self] in print(self!.title) } // weak capture
低匆辛參?凪嶄議掲停兆峙紗秘登僅燕器?輝液淫峇佩扮?繍斤燕器塀恂竃登僅?旺聞喘蒙協議哈喘膿業廛函。箭泌?
// Weak capture of "self.parent" as "parent"
myFunction { [weak parent = self.parent] in print(parent!.title) }
厚謹液淫議佚連才糞箭?萩歌深[液淫](for link)。
GRAMMAR OF A CLOSURE EXPRESSION
closure-expression → {closure-signatureoptstatements} closure-signature → parameter-clausefunction-resultoptin closure-signature → identifier-listfunction-resultoptin closure-signature → capture-listparameter-clausefunction-resultoptin closure-signature → capture-listidentifier-listfunction-resultoptin closure-signature → capture-listin capture-list → [capture-specifierexpression] capture-specifier → weak unowned unowned(safe) unowned(unsafe)
停兆撹埀議聞喘
停兆撹埀頁匯嶽恵諒撹埀議酒汽侘塀?箭泌壓旦訟窃侏賜窃圭隈議貧和猟嶄?哈喘窃侏辛容僅扮聞喘。万嗤泌和侘塀?.`member name`
箭泌?
var x = MyEnumeration.SomeValue x = .AnotherValue
GRAMMAR OF A IMPLICIT MEMBER EXPRESSION
implicit-member-expression → .identifier
凄催燕器塀議聞喘
凄催燕器塀坪何燕器塀喘矯催蛍侯?翌何喘凄催凄軟。耽倖燕器塀坪何辛參嗤匯倖燕器塀兆?万嚥燕器塀喘丹催蛍侯。凪鯉塀泌和?
(`identifier 1`: `expression 1`, `identifier 2`: `expression 2`,` ...`)
旋喘凄催燕器塀厘断辛參葎痕方距喘勧歌。泌惚凄催坪峪嗤匯倖峙?凪凄催燕器塀議窃侏軸葎緩峙議窃侏。箭泌?1?議窃侏頁`Int`?音頁`(Int)`。
GRAMMAR OF A PARENTHESIZED EXPRESSION
parenthesized-expression → (expression-element-listopt) expression-element-list → expression-element expression-element,expression-element-list expression-element → expression identifier:expression
媼了憲燕器塀議聞喘
媼了憲燕器頁葎阻壓験峙扮絞吭策待渠匯倖峙。箭泌壓和中議箭徨嶄?10瓜験公`x`?20夸瓜策待。(x, _) = (10, 20)
GRAMMAR OF A WILDCARD EXPRESSION
wildcard-expression → _
朔俐蔑燕器塀議聞喘
聞喘朔俐蔑塰麻憲賜凪麿朔俐蔑囂隈辛參幹秀朔俐蔑燕器塀。貫囂隈貧讐?侭嗤議酒汽燕器塀匆頁朔俐蔑燕器塀。Swift炎彈垂戻工阻參和朔俐蔑塰麻憲?
- ++ 徭紗
- -- 徭受
購噐緩塰麻憲議聞喘?萩歌深[児云荷恬憲]() 才[互雫荷恬憲]();
GRAMMAR OF A POSTFIX EXPRESSION
postfix-expression → primary-expression postfix-expression → postfix-expressionpostfix-operator postfix-expression → function-call-expression postfix-expression → initializer-expression postfix-expression → explicit-member-expression postfix-expression → postfix-self-expression postfix-expression → dynamic-type-expression postfix-expression → subscript-expression postfix-expression → forced-value-expression postfix-expression → optional-chaining-expression
痕方距喘議圭隈
痕方議距喘圭隈葎?痕方兆社凄催?凄催坪葎歌方双燕?謹倖歌方喘矯催侯蝕。箭泌?`function name`(`argument value 1`, `argument value 2`)
痕方兆辛參參販吭醤嗤痕方窃侏議兆忖栖凋兆。
泌惚痕方蕗苧嶄協吶阻歌方兆?椎担痕方距喘扮?歌方兆駅倬壓歌方峙念中?旺喘丹催蛍蝕?幣箭泌和?
`function name`(`argument name 1`: `argument value 1`, `argument name 2`: `argument value 2`)
痕方議距喘扮辛參壓液栽凄催議朔中諸効匯倖液淫朔弸。宸倖朔弸旗鷹翠匆頁宸倖痕方議朔紗議歌方。和中議曾倖痕方距喘吉丼?
// someFunction 議歌方双燕喇匯倖歌方x才匯倖液淫怏撹 someFunction(x, {0ドル == 13}) someFunction(x) {0ドル == 13}
泌惚液淫頁率匯歌方?弌凄催辛參福待。
// someFunction 峪嗤匯倖歌方 myData.someMethod() {0ドル == 13} myData.someMethod {0ドル == 13}
GRAMMAR OF A FUNCTION CALL EXPRESSION
function-call-expression → postfix-expressionparenthesized-expression function-call-expression → postfix-expressionparenthesized-expressionopttrailing-closure trailing-closure → closure-expression
兜兵晒匂燕器塀議喘隈
兜兵晒燕器塀繍恵諒乎窃侏議兜兵晒匂。凪潤更泌和?`expression`.init(`initializer arguments`)
兜兵晒匂議距喘圭隈嚥痕方距喘屢揖?徽嚥痕方音揖議頁?兜兵晒匂音頁匯倖峙。箭泌?
var x = SomeClass.someClassFunction // 屎鳩 var y = SomeClass.init // 危列低匆辛參聞喘兜兵晒匂栖距喘階窃議兜兵晒匂。
class SomeSubClass: SomeSuperClass { init() { // subclass initialization goes here super.init() } }
GRAMMAR OF AN INITIALIZER EXPRESSION
initializer-expression → postfix-expression.init
?塋蹴不臼躊鑛週鎚荒?
?塋蹴不臼躊鑛戎敏垠知篇价蔞沈爍tţ蕋vii鰈藜骶蝶不院T擶躊鑛什由不叡蛺?簷探禪彽Ą?`expression`.`member name`
嗤兆撹埀延楚辛恬葎窃議蕗苧議匯何蛍賜凪謡婢。箭泌?
class SomeClass {
var someProperty = 42
}
let c = SomeClass()
let y = c.someProperty
// Member access
圷怏議凋兆頁喘方忖喇巣蝕兵梓乏會咨塀凋兆議。箭泌:var t = (10, 20, 30) t.0 = t.1 // 孖壓 t 頁 (20, 20, 30)
怏周撹埀辛參資函凪恷競蚊蕗苧。
GRAMMAR OF AN EXPLICIT MEMBER EXPRESSION
explicit-member-expression → postfix-expression.decimal-digit explicit-member-expression → postfix-expression.identifiergeneric-argument-clauseopt
self議朔弸燕器圭塀議聞喘
self議朔弸燕器聞喘頁喘燕器塀賜窃侏兆紗“.self” 更撹議。凪侘塀泌和?`expression`.self
`type`.self
及匯嶽侘塀誼欺燕器塀議峙。箭泌x.self祥頁x峙。
及屈嶽侘塀繍資誼窃侏議峙。旋喘宸嶽侘塀辛參參峙議侘塀資誼窃侏。箭泌。SomeClass.self祥頁SomeClass窃?低辛參繍凪勧弓公俊鞭窃窃侏歌方議痕方賜圭隈。
GRAMMAR OF A SELF EXPRESSION
postfix-self-expression → postfix-expression.self
強蓑窃侏燕器塀議聞喘
強蓑窃侏燕器塀喇燕器塀紗“.dynamicType”更撹。凪潤更泌和?`expression`.dynamicType
燕器塀音嬬頁窃兆。頼屁議dynamicType燕器塀資誼燕器塀議塰佩扮窃兆峙。泌和箭?
class SomeBaseClass {
class func printClassName() {
println("SomeBaseClass")
}
}
class SomeSubClass: SomeBaseClass {
override class func printClassName() {
println("SomeSubClass")
}
}
let someInstance: SomeBaseClass = SomeSubClass()
// someInstance議園咎扮窃侏頁SomeBaseClass , 徽頁
// someInstance議塰佩扮窃侏頁SomeSubClass
someInstance.dynamicType.printClassName()
// 嬉咫 "SomeSubClass"
GRAMMAR OF A DYNAMIC TYPE EXPRESSION
dynamic-type-expression → postfix-expression.dynamicType
冉重云燕器塀議聞喘
冉重云燕器塀聞喘斤哘蕗苧議get圭隈倖set圭隈栖資函冉重云。万議鯉塀泌和?`expression`[`index expressions`]
葎阻資函冉重云燕器塀議峙?繍冉重云燕器圭塀恬葎歌方距喘叔炎議get圭隈。輝隼?葎阻譜崔万議峙?冉重云議set圭隈匆喘揖劔議圭塀距喘。
厚謹購噐冉重云蕗苧?萩歌需[冉重云蕗苧]()。
GRAMMAR OF A SUBSCRIPT EXPRESSION
subscript-expression → postfix-expression[expression-list]
膿崙介淫燕器塀議聞喘
輝匯倖辛僉峙音葎腎扮?辛參斤辛僉峙序佩膿崙介淫。 万議潤更泌和?`expression`?
徭登僅全俊燕器塀議聞喘
徭登僅全俊宥狛聞喘辛僉峙紗朔弸?聞喘掲械酒汽。万議潤更泌和?`expression`.?
朔弸?繍參辛僉峙議侘塀卦指凪歌方。
壓朔弸燕器嶄?徭登僅全俊議函峙圭塀載蒙艶。泌惚徭登僅全俊葎腎?朔中凪麿議燕器塀音氏瓜峇佩拝屁倖燕器塀卦指腎。泌惚徭登僅全俊潤惚音頁腎?燕器塀繍瓜介淫旺喘写偬峇佩噫和議朔弸燕器塀。音胎採嶽秤趨?朔弸燕器塀議峙脅頁匯倖辛僉峙窃侏。
泌惚徭登僅全俊頁廼耗議?峪卦指恷翌蚊議議辛僉峙窃侏。壓和中議箭徨嶄?泌惚`c`音頁nil?万議峙繍瓜介淫?旺喘參資誼`.property` 才 `.performAction()`議峙。屁倖`c?.property.performAction() `頁辛僉峙窃侏。
var c: SomeClass?
var result: Bool? = c?.property.performAction()
和中議箭徨夸幣吭阻音聞喘徭登僅全俊議秤侘。
if let unwrappedC = c {
result = unwrappedC.property.performAction()
}
GRAMMAR OF AN OPTIONAL-CHAINING EXPRESSION
optional-chaining-expression → postfix-expression?