遍匈 / Swift / Swift縮殻 /

Swift奉來

<貧匯准 和匯准>
奉來繍峙効蒙協議窃、潤更賜旦訟購選。贋刈奉來贋刈械楚賜延楚恬葎糞箭議匯何蛍?柴麻奉來柴麻?遇音頁贋刈?匯倖峙。柴麻奉來辛參喘噐窃、潤更悶才旦訟戦?贋刈奉來峪嬬喘噐窃才潤更悶。

贋刈奉來才柴麻奉來宥械喘噐蒙協窃侏議糞箭?徽頁?奉來匆辛參岷俊喘噐窃侏云附?宸嶽奉來各葎窃侏奉來。総翌?珊辛參協吶奉來酌篇匂栖酌陣奉來峙議延晒?參緩栖乾窟匯倖徭協吶議荷恬。奉來酌篇匂辛參耶紗欺徭失亟議贋刈奉來貧?匆辛參耶紗欺貫幻窃写覚議奉來貧。

贋刈奉來

酒汽栖傍?匯倖贋刈奉來祥頁贋刈壓蒙協窃賜潤更悶議糞箭戦議匯倖械楚賜延楚?贋刈奉來辛參頁延楚贋刈奉來?喘購囚忖var協吶??匆辛參頁械楚贋刈奉來?喘購囚忖let協吶?。

辛參壓協吶贋刈奉來議扮昨峺協潮範峙?萩歌深更夛狛殻匯嫗議潮範奉來峙匯准。匆辛參壓更夛狛殻嶄譜崔賜俐個贋刈奉來議峙?封崛俐個械楚贋刈奉來議峙?萩歌深更夛狛殻匯嫗議壓兜兵晒竣粁俐個械楚贋刈奉來匯准。

和中議箭徨協吶阻匯倖兆葎FixedLengthRange議潤更悶?麿宙峰阻匯倖壓幹秀朔涙隈俐個峙囃錐業議曝寂?
struct FixedLengthRange {
 var firstValue: Int
 let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// 乎曝寂燕幣屁方0?1?2 rangeOfThreeItems.firstValue = 6
// 乎曝寂孖壓燕幣屁方6?7?8 
FixedLengthRange議糞箭淫根匯倖兆葎firstValue議延楚贋刈奉來才匯倖兆葎length議械楚贋刈奉來。壓貧中議箭徨嶄?length壓幹秀糞箭議扮昨瓜験峙?咀葎万頁匯倖械楚贋刈奉來?侭參岻朔涙隈俐個万議峙。

械楚才贋刈奉來

泌惚幹秀阻匯倖潤更悶議糞箭旺験峙公匯倖械楚?夸涙隈俐個糞箭議販採奉來?軸聞協吶阻延楚贋刈奉來?
let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
// 乎曝寂燕幣屁方0?1?2?3
rangeOfFourItems.firstValue = 6
// 勝砿firstValue鮒梧延楚奉來?宸戦珊頁氏烏危 
咀葎rangeOfFourItems蕗苧撹阻械楚?喘let購囚忖??軸聞firstValue頁匯倖延楚奉來?匆涙隈壅俐個万阻。

宸嶽佩葎頁喇噐潤更悶?struct?奉噐峙窃侏。輝峙窃侏議糞箭瓜蕗苧葎械楚議扮昨?万議侭嗤奉來匆祥撹阻械楚。

奉噐哈喘窃侏議窃?class?夸音匯劔?委匯倖哈喘窃侏議糞箭験公匯倖械楚朔?挽隼辛參俐個糞箭議延楚奉來。

决岳贋刈奉來

决岳贋刈奉來頁峺輝及匯肝瓜距喘議扮昨嘉氏柴麻凪兜兵峙議奉來。壓奉來蕗苧念聞喘@lazy栖炎幣匯倖决岳贋刈奉來。
廣吭?駅倬繍决岳贋刈奉來蕗苧撹延楚?聞喘var購囚忖??咀葎奉來議峙壓糞箭更夛頼撹岻念辛嬬涙隈誼欺。遇械楚奉來壓更夛狛殻頼撹岻念駅倬勣嗤兜兵峙?咀緩涙隈蕗苧撹决岳奉來。
决岳奉來載嗤喘?輝奉來議峙卆正噐壓糞箭議更夛狛殻潤崩念涙隈岑祇醤悶峙議翌何咀殆扮?賜宀輝奉來議峙俶勣鹸墫賜寄楚柴麻扮?辛參峪壓俶勣議扮昨栖柴麻万。

和中議箭徨聞喘阻决岳贋刈奉來栖閲窒鹸墫窃議音駅勣議兜兵晒。箭徨嶄協吶阻DataImporter才DataManager曾倖窃?和中頁何蛍旗鷹?
class DataImporter {
 /*
 DataImporter 頁匯倖繍翌何猟周嶄議方象擬秘議窃。
 宸倖窃議兜兵晒氏嶧債音富扮寂。
 */
 var fileName = "data.txt"
 // 宸頁戻工方象擬秘孔嬬
}
class DataManager {
 @lazy var importer = DataImporter()
 var data = String[]()
 // 宸頁戻工方象砿尖孔嬬
}
let manager = DataManager()
manager.data += "Some data"
manager.data += "Some more data"
// DataImporter 糞箭議 importer 奉來珊短嗤瓜幹秀 
DataManager窃淫根匯倖兆葎data議贋刈奉來?兜兵峙頁匯倖腎議忖憲堪?String?方怏。埋隼短嗤亟竃畠何旗鷹?DataManager窃議朕議頁砿尖才戻工斤宸倖忖憲堪方怏議恵諒。

DataManager議匯倖孔嬬頁貫猟周擬秘方象?乎孔嬬喇DataImporter窃戻工?DataImporter俶勣嶧債音富扮寂頼撹兜兵晒?咀葎万議糞箭壓兜兵晒扮辛嬬勣嬉蝕猟周?珊勣響函猟周坪否欺坪贋。

DataManager匆辛嬬音貫猟周嶄擬秘方象。侭參輝DataManager議糞箭瓜幹秀扮?短駅勣幹秀匯倖DataImporter議糞箭?厚苧崘議頁輝喘欺DataImporter議扮昨嘉肇幹秀万。

喇噐聞喘阻@lazy?importer奉來峪嗤壓及匯肝瓜恵諒議扮昨嘉瓜幹秀。曳泌恵諒万議奉來fileName扮?
println(manager.importer.fileName)
// DataImporter 糞箭議 importer 奉來孖壓瓜幹秀阻
// 補竃 "data.txt” 

贋刈奉來才糞箭延楚

泌惚艇嗤狛 Objective-C 将刮?哘乎岑祇嗤曾嶽圭塀壓窃糞箭贋刈峙才哈喘。斤噐奉來栖傍?匆辛參聞喘糞箭延楚恬葎奉來峙議朔極贋刈。

Swift 園殻囂冱嶄委宸乂尖胎由匯喘奉來栖糞孖。Swift 嶄議奉來短嗤斤哘議糞箭延楚?奉來議朔極贋刈匆涙隈岷俊恵諒。宸祥閲窒阻音揖魁尚和恵諒圭塀議是氾?揖扮匆繍奉來議協吶酒晒撹匯倖囂鞘。 匯倖窃侏嶄奉來議畠何佚連——淫凄凋兆、窃侏才坪贋砿尖蒙尢——脅壓率匯匯倖仇圭?窃侏協吶嶄?協吶。

柴麻奉來

茅贋刈奉來翌?窃、潤更悶才旦訟辛參協吶柴麻奉來?柴麻奉來音岷俊贋刈峙?遇頁戻工匯倖 getter 栖資函峙?匯倖辛僉議 setter 栖寂俊譜崔凪麿奉來賜延楚議峙。
struct Point {
 var x = 0.0, y = 0.0
}
struct Size {
 var width = 0.0, height = 0.0
}
struct Rect {
 var origin = Point()
 var size = Size()
 var center: Point {
 get {
 let centerX = origin.x + (size.width / 2)
 let centerY = origin.y + (size.height / 2)
 return Point(x: centerX, y: centerY)
 }
 set(newCenter) {
 origin.x = newCenter.x - (size.width / 2)
 origin.y = newCenter.y - (size.height / 2)
 }
 }
}
var square = Rect(origin: Point(x: 0.0, y: 0.0),
 size: Size(width: 10.0, height: 10.0))
let initialSquareCenter = square.center
square.center = Point(x: 15.0, y: 15.0)
println("square.origin is now at (\(square.origin.x), \(square.origin.y))")
// 補竃 "square.origin is now at (10.0, 10.0)”
宸倖箭徨協吶阻 3 倖叱採侘彜議潤更悶?
  • Point撃廾阻匯倖(x, y)議恫炎
  • Size撃廾阻匯倖width才height
  • Rect燕幣匯倖嗤圻泣才樫雁議裳侘
Rect匆戻工阻匯倖兆葎center議柴麻奉來。匯倖裳侘議嶄伉泣辛參貫圻泣才樫雁栖麻竃?侭參音俶勣繍万參?塋宿禱澶?Point栖隠贋。Rect議柴麻奉來center戻工阻徭協吶議 getter 才 setter 栖資函才譜崔裳侘議嶄伉泣?祥崧万嗤匯倖贋刈奉來匯劔。

箭徨嶄俊和栖幹秀阻匯倖兆葎square議Rect糞箭?兜兵峙圻泣頁(0, 0)?錐業互業脅頁10。泌夕侭幣清弼屎圭侘。

square議center奉來辛參宥狛泣塰麻憲?square.center?栖恵諒?宸氏距喘 getter 栖資函奉來議峙。効岷俊卦指厮将贋壓議峙音揖?getter 糞縞貧宥狛柴麻隼朔卦指匯倖仟議Point栖燕幣square議嶄伉泣。泌旗鷹侭幣?万屎鳩卦指阻嶄伉泣(5, 5)。

center奉來岻朔瓜譜崔阻匯倖仟議峙(15, 15)?燕幣?嘔貧圭卞強屎圭侘欺泌夕侭幣拡弼屎圭侘議了崔。譜崔奉來center議峙氏距喘 setter 栖俐個奉來origin議x才y議峙?貫遇糞孖卞強屎圭侘欺仟議了崔。
Computed Properties sample

宴楯 setter 蕗苧

泌惚柴麻奉來議 setter 短嗤協吶燕幣仟峙議歌方兆?夸辛參聞喘潮範兆各newValue。和中頁聞喘阻宴楯 setter 蕗苧議Rect潤更悶旗鷹?
struct AlternativeRect {
 var origin = Point()
 var size = Size()
 var center: Point {
 get {
 let centerX = origin.x + (size.width / 2)
 let centerY = origin.y + (size.height / 2)
 return Point(x: centerX, y: centerY)
 }
 set {
 origin.x = newValue.x - (size.width / 2)
 origin.y = newValue.y - (size.height / 2)
 }
 }
}

峪響柴麻奉來

峪嗤 getter 短嗤 setter 議柴麻奉來祥頁峪響柴麻奉來。峪響柴麻奉來悳頁卦指匯倖峙?辛參宥狛泣塰麻憲恵諒?徽音嬬譜崔仟議峙。
廣吭?駅倬聞喘var購囚忖協吶柴麻奉來?淫凄峪響柴麻奉來?咀葎麿断議峙音頁耕協議。let購囚忖峪喘栖蕗苧械楚奉來?燕幣兜兵晒朔壅匆涙隈俐個議峙。
峪響柴麻奉來議蕗苧辛參肇渠get購囚忖才雑凄催?
struct Cuboid {
 var width = 0.0, height = 0.0, depth = 0.0
 var volume: Double {
 return width * height * depth
 }
}
let fourByFiveByTwo = Cuboid(width: 4.0, height: 5.0, depth: 2.0)
println("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)")
// 補竃 "the volume of fourByFiveByTwo is 40.0"
宸倖箭徨協吶阻匯倖兆葎Cuboid議潤更悶?燕幣眉略腎寂議羨圭悶?淫根width、height才depth奉來?珊嗤匯倖兆葎volume議峪響柴麻奉來喘栖卦指羨圭悶議悶持。譜崔volume議峙坐涙吭吶?咀葎宥狛width、height才depth祥嬬麻竃volume。隼遇?Cuboid戻工匯倖峪響柴麻奉來栖斑翌何喘薩岷俊資函悶持頁載嗤喘議。

奉來酌篇匂

奉來酌篇匂酌陣才峒哘奉來峙議延晒?耽肝奉來瓜譜崔峙議扮昨脅氏距喘奉來酌篇匂?封崛仟議峙才孖壓議峙屢揖議扮昨匆音箭翌。

辛參葎茅阻决岳贋刈奉來岻翌議凪麿贋刈奉來耶紗奉來酌篇匂?匆辛參宥狛嶷墮奉來議圭塀葎写覚議奉來?淫凄贋刈奉來才柴麻奉來?耶紗奉來酌篇匂。奉來嶷墮萩歌深写覚匯嫗議嶷墮
廣吭?音俶勣葎涙隈嶷墮議柴麻奉來耶紗奉來酌篇匂?咀葎辛參宥狛 setter 岷俊酌陣才峒哘峙議延晒。
辛參葎奉來耶紗泌和議匯倖賜畠何酌篇匂?
  • willSet壓譜崔仟議峙岻念距喘
  • didSet壓仟議峙瓜譜崔岻朔羨軸距喘

willSet酌篇匂氏繍仟議奉來峙恬葎耕協歌方勧秘?壓willSet議糞孖旗鷹嶄辛參葎宸倖歌方峺協匯倖兆各?泌惚音峺協夸歌方挽隼辛喘?宸扮聞喘潮範兆各newValue燕幣。

窃貌仇?didSet酌篇匂氏繍症議奉來峙恬葎歌方勧秘?辛參葎乎歌方凋兆賜宀聞喘潮範歌方兆oldValue。
廣吭?willSet才didSet酌篇匂壓奉來兜兵晒狛殻嶄音氏瓜距喘?麿断峪氏輝奉來議峙壓兜兵晒岻翌議仇圭瓜譜崔扮瓜距喘。
宸戦頁匯倖willSet才didSet議糞縞箭徨?凪嶄協吶阻匯倖兆葎StepCounter議窃?喘栖由柴輝繁化佩扮議悳化方?辛參効柴化匂賜凪麿晩械桐繕議由柴廾崔議補秘方象塘栽聞喘。
class StepCounter {
 var totalSteps: Int = 0 {
 willSet(newTotalSteps) {
 println("About to set totalSteps to \(newTotalSteps)")
 }
 didSet {
 if totalSteps > oldValue {
 println("Added \(totalSteps - oldValue) steps")
 }
 }
 }
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// About to set totalSteps to 200
// Added 200 steps
stepCounter.totalSteps = 360
// About to set totalSteps to 360
// Added 160 steps
stepCounter.totalSteps = 896
// About to set totalSteps to 896
// Added 536 steps
StepCounter窃協吶阻匯倖Int窃侏議奉來totalSteps?万頁匯倖贋刈奉來?淫根willSet才didSet酌篇匂。

輝totalSteps譜崔仟峙議扮昨?万議willSet才didSet酌篇匂脅氏瓜距喘?封崛輝仟議峙才孖壓議峙頼畠屢揖匆氏距喘。

箭徨嶄議willSet酌篇匂繍燕幣仟峙議歌方徭協吶葎newTotalSteps?宸倖酌篇匂峪頁酒汽議繍仟議峙補竃。

didSet酌篇匂壓totalSteps議峙個延朔瓜距喘?万委仟議峙才症議峙序佩斤曳?泌惚悳議化方奐紗阻?祥補竃匯倖嶧連燕幣奐紗阻謹富化。didSet短嗤戻工徭協吶兆各?侭參潮範峙oldValue燕幣症峙議歌方兆。
廣吭?泌惚壓didSet酌篇匂戦葎奉來験峙?宸倖峙氏紋算酌篇匂岻念譜崔議峙。

畠蕉延楚才蕉何延楚

柴麻奉來才奉來酌篇匂侭宙峰議庁塀匆辛參喘噐畠蕉延楚才蕉何延楚?畠蕉延楚頁壓痕方、圭隈、液淫賜販採窃侏岻翌協吶議延楚?蕉何延楚頁壓痕方、圭隈賜液淫坪何協吶議延楚。

念中嫗准戻欺議畠蕉賜蕉何延楚脅奉噐贋刈侏延楚?効贋刈奉來窃貌?万戻工蒙協窃侏議贋刈腎寂?旺塋俯響函才亟秘。

総翌?壓畠蕉賜蕉何袈律脅辛參協吶柴麻侏延楚才葎贋刈侏延楚協吶酌篇匂?柴麻侏延楚効柴麻奉來匯劔?卦指匯倖柴麻議峙遇音頁贋刈峙?蕗苧鯉塀匆頼畠匯劔。
廣吭?畠蕉議械楚賜延楚脅頁决岳柴麻議?効决岳贋刈奉來屢貌?音揖議仇圭壓噐?畠蕉議械楚賜延楚音俶勣炎芝@lazy蒙來。蕉何袈律議械楚賜延楚音氏决岳柴麻。

窃侏奉來

糞箭議奉來奉噐匯倖蒙協窃侏糞箭?耽肝窃侏糞箭晒朔脅啜嗤徭失議匯耗奉來峙?糞箭岻寂議奉來屢札鏡羨。

匆辛參葎窃侏云附協吶奉來?音砿窃侏嗤謹富倖糞箭?宸乂奉來脅峪嗤率匯匯芸。宸嶽奉來祥頁窃侏奉來。

窃侏奉來喘噐協吶蒙協窃侏侭嗤糞箭慌峴議方象?曳泌侭嗤糞箭脅嬬喘議匯倖械楚?祥崧 C 囂冱嶄議床蓑械楚??賜宀侭嗤糞箭脅嬬恵諒議匯倖延楚?祥崧 C 囂冱嶄議床蓑延楚?。

斤噐峙窃侏?峺潤更悶才旦訟?辛參協吶贋刈侏才柴麻侏窃侏奉來?斤噐窃?class?夸峪嬬協吶柴麻侏窃侏奉來。

峙窃侏議贋刈侏窃侏奉來辛參頁延楚賜械楚?柴麻侏窃侏奉來効糞箭議柴麻奉來匯劔協吶撹延楚奉來。
廣吭?効糞箭議贋刈奉來音揖?駅倬公贋刈侏窃侏奉來峺協潮範峙?咀葎窃侏云附涙隈壓兜兵晒狛殻嶄聞喘更夛匂公窃侏奉來験峙。

窃侏奉來囂隈

壓 C 賜 Objective-C 嶄?床蓑械楚才床蓑延楚議協吶頁宥狛蒙協窃侏紗貧global購囚忖。壓 Swift 園殻囂冱嶄?窃侏奉來頁恬葎窃侏協吶議匯何蛍亟壓窃侏恷翌蚊議雑凄催坪?咀緩万議恬喘袈律匆祥壓窃侏屶隔議袈律坪。

聞喘購囚忖static栖協吶峙窃侏議窃侏奉來?購囚忖class栖葎窃?class?協吶窃侏奉來。和中議箭徨處幣阻贋刈侏才柴麻侏窃侏奉來議囂隈?
struct SomeStructure {
 static var storedTypeProperty = "Some value."
 static var computedTypeProperty: Int {
 // 宸戦卦指匯倖 Int 峙
 }
}
enum SomeEnumeration {
 static var storedTypeProperty = "Some value."
 static var computedTypeProperty: Int {
 // 宸戦卦指匯倖 Int 峙
 }
}
class SomeClass {
 class var computedTypeProperty: Int {
 // 宸戦卦指匯倖 Int 峙
 }
}
廣吭?箭徨嶄議柴麻侏窃侏奉來頁峪響議?徽匆辛參協吶辛響辛亟議柴麻侏窃侏奉來?効糞箭柴麻奉來議囂隈窃貌。

資函才譜崔窃侏奉來議峙

効糞箭議奉來匯劔?窃侏奉來議恵諒匆頁宥狛泣塰麻憲栖序佩?徽頁?窃侏奉來頁宥狛窃侏云附栖資函才譜崔?遇音頁宥狛糞箭。曳泌?
println(SomeClass.computedTypeProperty)
// 補竃 "42"
println(SomeStructure.storedTypeProperty)
// 補竃 "Some value."
SomeStructure.storedTypeProperty = "Another value."
println(SomeStructure.storedTypeProperty)
// 補竃 "Another value.”
和中議箭徨協吶阻匯倖潤更悶?聞喘曾倖贋刈侏窃侏奉來栖燕幣謹倖蕗祇議蕗咄窮峠峙?耽倖蕗祇嗤匯倖 0 欺 10 岻寂議屁方燕幣蕗咄窮峠峙。

朔中議夕燕婢幣阻泌採選栽聞喘曾倖蕗祇栖燕幣匯倖羨悶蕗議蕗咄窮峠峙。輝蕗祇議窮峠峙頁 0?短嗤匯倖菊氏疏?輝蕗祇議窮峠峙頁 10?侭嗤菊泣疏。云夕嶄?恣蕗祇議窮峠頁 9?嘔蕗祇議窮峠頁 7。
Static Properties VUMeter
貧中侭宙峰議蕗祇庁侏聞喘AudioChannel潤更悶栖燕幣?
struct AudioChannel {
 static let thresholdLevel = 10
 static var maxInputLevelForAllChannels = 0
 var currentLevel: Int = 0 {
 didSet {
 if currentLevel > AudioChannel.thresholdLevel {
 // 繍仟窮峠峙譜崔葎熊峙
 currentLevel = AudioChannel.thresholdLevel
 }
 if currentLevel > AudioChannel.maxInputLevelForAllChannels {
 // 贋刈輝念窮峠峙恬葎仟議恷寄補秘窮峠
 AudioChannel.maxInputLevelForAllChannels = currentLevel
 }
 }
 }
}
潤更AudioChannel協吶阻 2 倖贋刈侏窃侏奉來栖糞孖貧峰孔嬬。及匯倖頁thresholdLevel?燕幣蕗咄窮峠議恷寄貧尫穉峙?万頁匯倖函峙葎 10 議械楚?斤侭嗤糞箭脅辛需?泌惚蕗咄窮峠互噐 10?夸函恷寄貧尫峙 10?需朔中宙峰?。

及屈倖窃侏奉來頁延楚贋刈侏奉來maxInputLevelForAllChannels?万喘栖燕幣侭嗤AudioChannel糞箭議窮峠峙議恷寄峙?兜兵峙頁 0。

AudioChannel匆協吶阻匯倖兆葎currentLevel議糞箭贋刈奉來?燕幣輝念蕗祇孖壓議窮峠峙?函峙葎 0 欺 10。

奉來currentLevel淫根didSet奉來酌篇匂栖殊臥耽肝仟譜崔朔議奉來峙?嗤泌和曾倖殊臥?
  • 泌惚currentLevel議仟峙寄噐塋俯議穉峙thresholdLevel?奉來酌篇匂繍currentLevel議峙尫協葎穉峙thresholdLevel。
  • 泌惚俐屎朔議currentLevel峙寄噐販採岻念販吭AudioChannel糞箭嶄議峙?奉來酌篇匂繍仟峙隠贋壓床蓑奉來maxInputLevelForAllChannels嶄。
廣吭?壓及匯倖殊臥狛殻嶄?didSet奉來酌篇匂繍currentLevel譜崔撹阻音揖議峙?徽宸扮音氏壅肝距喘奉來酌篇匂。
辛參聞喘潤更悶AudioChannel栖幹秀燕幣羨悶蕗狼由議曾倖蕗祇leftChannel才rightChannel?
var leftChannel = AudioChannel()
var rightChannel = AudioChannel() 
泌惚繍恣蕗祇議窮峠譜崔撹 7?窃侏奉來maxInputLevelForAllChannels匆氏厚仟撹 7?
leftChannel.currentLevel = 7
println(leftChannel.currentLevel)
// 補竃 "7"
println(AudioChannel.maxInputLevelForAllChannels)
// 補竃 "7" 
泌惚編夕繍嘔蕗祇議窮峠譜崔撹 11?夸氏繍嘔蕗祇議currentLevel俐屎欺恷寄峙 10?揖扮maxInputLevelForAllChannels議峙匆氏厚仟欺 10?
rightChannel.currentLevel = 11
println(rightChannel.currentLevel)
// 補竃 "10"
println(AudioChannel.maxInputLevelForAllChannels)
// 補竃 "10" 
<貧匯准 和匯准>

AltStyle によって変換されたページ (->オリジナル) /