京é½ã§éçºå宿ããã¦ãã
å é±ã®è©±ã«ãªãã¾ãããéçºå宿ã«è¡ã£ã¦ãã¾ããã
ä¼ç¤¾ã®æå¿ã¡ã³ãã¼+OBã§éçºå宿ã«è¡ã£ã¦ãã
å»å¹´ã®ç§ã«
ã§æ¸ãã¦ãéçºå宿+æçµæ¥ã®èå°å·¡ç¤¼ã®ãã¿ã¼ã³ãæé«æ¥½ãããã¨æããã®ã§ãä»åããã®ãã¿ã¼ã³ããããªã¨æã£ã¦ããããid:naoya ãå宿ã®Slack Teamã§
ã¨èå°ã®ãªã¯ã¨ã¹ããåºãã¦ãããã®ã§ãä¼ç»ãã¦è¡ã£ã¦ãã¾ãããä»åã¯ååã«å ãã¦
ã¨ãã£ãã¡ã³ãã¼ãå¢ãã¦ç·å¢9åãåå ãã¾ããã人æ°ãå¢ããã¨å¬ããã§ããã
æºåã»ä¼ç»
è¡ãå ã¯è¿æ±ç¥å®®ã¨æ±ºã¾ã£ã¦ããã®ã§ãæ»å¨ã¯äº¬é½ã«ãã¾ãããååã¯å¤æ°å®¶ã ã£ãã®ã§ãä»åã¯äº¬çºå®¶ã§æ¢ããã®ã§ããããªããªãããç©ä»¶ãè¦ã¤ãããAirbnbã§æ¢ãã¦äº¬é½ åæ¡ã«ããä¸è»å®¶ã貸ãã¾ããã
åååæ§
- 2æ³3æ¥
- ãã¼ãã¯ããªã¼
- å¤ã¯ãã¡ã¯ããµããã観ã
- æçµæ¥ã¯å¸°ãåã«è¿æ±ç¥å®®ã«èå°å·¡ç¤¼ã«è¡ã
ã¨ããæãã§ä¼ç»ãé²ãã¾ããã
æã¡ç©
æè¿ã¯å®¿ã®è¨åãããã®ã§å¤§ä½ã¯ãªãã¨ããªãã®ã§ãããä¸è¨ãæåããã¨å¿«é©ã«å宿ã©ã¤ããéãããã¨æãã¾ãã
- Wi-Fiåç·
- ç¾å°ã®ãããåç·ãå¼±ãã£ãå ´åã«ã¯ã©ã¤ã¢ã³ããåæ£ã§ãã
- é»æºã¿ãã
- 3人ã«1ã¤ãããã®åéã ã¨ã¡ããã©ãã
- ã³ã³ã»ã³ãã¯3P->2Pã®å¤æãã§ãããã®ããã
ã¹ã±ã¸ã¥ã¼ã«
ãã£ããã§ããããããªæãã§ãã
8/11(æ¨ã»ç¥)
åååæ§ãéçºéå§æã«èªåã®ãã¿ããã¾ãå ±æããã«ã¹ã¿ã¼ããã¾ãããæçµæ¥ã®ææçºè¡¨LTã¾ã§ãã¿ãã»ã¨ãã©å ±æããã«ãã£ã¦ããã®ã§ãææçºè¡¨ããªããªãçãä¸ããã¾ããã
- 13:00 京é½é§ éå(åºçºå°ç¹ãæ±äº¬ãåå·ãæ°æ¨ªæµãç¾½ç°ã¨ç°ãªã£ã¦ããã®ã§ç¾å°éåã«ãã¾ãã)
- 13:30 æ»å¨å ã®æ°å®¶ã¸
- 14:00 è·ç©ãé ãã¦ã©ã³ãï¼è²·ãåºã
- 16:00 ãã§ãã¯ã¤ã³
- 16:30 ã¹ã±ã¸ã¥ã¼ã«ãå ±æãã¦éçºã¹ã¿ã¼ã!!
- 20:30 å¤é£¯(ä¹æ¡ãããå ªè½ã§ããå± é å±)
- 23:00 風å(è¿ãã®é湯ã¸)
- 24:00 ãã¡ã¯ããµããè¦³è³ ç¬¬5話ãããã¾ã§?
- ãã¨ã¯éçºãç¶ãã人ã¯ç¶ãã¦ãç ããªã£ããå¯ã¦çµäº
- èªåã¯27:00é ã¾ã§ãã£ã¦ããæ°ããã¾ã
8/12(é)
é£äºä»¥å¤ã¯ã»ã¼éçºãã¦ã¾ãããååã¨ç°ãªãã®ã¯å¤é£¯ãç¾å³ãããã¦é ããããã¾é£²ãã§å¤ã®é²æãæãããã«åºããªãã£ããã¨ã§ãããå¤é£¯ã¾ã§ã«é²æãåºãã°ä½ãæ°ã«ããã«é£²ãããã¨ãããã¨ãå¦ãã å¤ã§ããã
- 8:00é åèªèµ·åºãã¦éçºéå§(id:naoya, id:zimathon ãããã¯ãã£ã¨æ©ãèµ·ãã¦ã¾ãã)
- ãã¨ã¯é£äºä»¥å¤ã¯åºæ¬éçºãã¦ã¾ãã
- å¤ã¯åæ¥åæ§ãã¡ã¯ããµããã観è³ãã¦ããã¡ã³ãã¼ããã¾ãã
èªåã¯é 飲ãã§è½ã¡ãå¾ã4:00ãããã«èµ·ãã¦ä½æ¥ãåéããã®ã§ãã1Fã«éãã¦è¡ã£ãã id:shibayan ãä¸å¿ã¨ããã¡ã³ãã¼ããã£ã¨ãã¡ã¯ããµããã観ã¦ã¦ããªãã¨ãèå°ã«è¡ãåã«è¿æ±ç¥å®®ã®åã¾ã§....ãã¨15話ãããã¾ã§é²æãã¦ã¦ãããã¾ããããããã
ãã®äº¬é¢¨ã好ã¿ç¼ããã¨ã£ã¦ãç¾å³ããã£ãã§ãããåºã¯ãã¡ãã
8/13(å)
ãã§ãã¯ã¢ã¦ãã10:00ã¾ã§ã ã£ãã®ã§ã9:00ã¾ã§ã«ãã§ãã¯ã¢ã¦ãã®æºåãæ¸ã¾ãã¦ææçºè¡¨LTãããå¾ã§ãèå°ã¸å¯ãéãã¦ããå¸°å® ãã¾ããã
- 6:00é ~9:00 éçºè¿½ãè¾¼ã¿ãã¤ã¤ããã§ãã¯ã¢ã¦ãæºå
- 9:00~10:00 ææçºè¡¨LT
- 10:00 ãã§ãã¯ã¢ã¦ããã¦å¨æ¥ç·ã§å¤§æ´¥äº¬ã¸
- 11:30~13:00 è¿æ±ç¥å®®ã¸èå°å·¡ç¤¼
- 13:30 æ°ç¦è館ã§ã©ã³ã
- 14:30 京é½é§ ã¸æ»ã£ã¦è§£æ£
è¿æ±ç¥å®®ã§ã¯ãã¡ã¯ããµããã£ããããããã¦èå°ã楽ãã¿ã¾ããã
ã¡ã¯ããµããã£ãä¸ã§ã pic.twitter.com/lPOkjJ76Ca
— Naoya Ito (@naoya_ito) 2016å¹´8æ13æ¥
èå°å·¡ç¤¼ä¸ #ã¡ã¯ããµã pic.twitter.com/NjZv6MKvOu
— kensuke tanaka (@kentana20) 2016å¹´8æ13æ¥
大éªã¸è¡ãã¨ããã¡ã³ãã¼ãã京é½ã§ããä¸æ³ãã¦ããã¡ã³ãã¼ãããã®ã§ã京é½é§ ã§æµã解æ£ã¨ãªãã¾ãããèªåã¯äº¬é½ã®å人ã¨å°ãã ãä¼ã£ã¦ããå¤ã«å¸°å® ãã¾ããã
ãã£ããã¨
èªåã¯ä»åã®å宿ã§ã¯éçãµã¤ãã¸ã§ãã¬ã¼ã¿ã¼ã触ããã¨èãã¦ãã¾ãããæè¿ã¨ã³ã¸ãã¢æ¡ç¨å¨ããå¼·åãã¦ããæä¸ã§ãèªç¤¾æ¡ç¨ãã¼ã¸ã®ä½ããå¤ãããã¨æã£ã¦ããã®ã§Middlemanã触ã£ã¦ã¾ããã
ã¨ãã£ãã¨ããã¾ã§ããã¾ãããææçºè¡¨è³æã¯ä»¥ä¸ã
ã¾ã¨ã
éçºå宿ã¯ãã
10ã¶æã¶ãã®éçºå宿ã§ãããããã¯ãæé«ã«æ¥½ããã£ãã§ããæ¥å¸¸ããé¢ãã¦éçºã«éä¸ããæéã¯è³ç¦ã§ãã
- èå°ã§ãã¡ã¯ããµãã
- èå°å·¡ç¤¼
ã¨ããååè¯ãã£ãç¹ãç¶ç¶ãã¤ã¤ãä»åã¯åå è ãå¢ãã¦(åå6åã«å¯¾ãã¦ãä»åã¯9å)ã¨ã£ã¦ã楽ããã£ãã§ãã
ãéçºå宿ããã®èå°å·¡ç¤¼ãã¨ãããã¿ã¼ã³ã¯ãã£ã¡ãããã§ããã¬ãããªéçºã«éä¸ãã¦ææãåºããå¾ã§èå°ã楽ããã¨ããäºåº¦ç¾å³ããã¤ãã³ãã§ããã
Middlemanãã
- Railsããéçãµã¤ããä½ãæ©è½ã ãæãåºããæãã§ä½¿ãããã
- éçºãããããããããã¤å¨ããå å®
- Markdownã«ã対å¿ãã¦ãã
ã¨ã ããã欲ããæ©è½ãæ´ã£ã¦ãã¦ãéçºãæ´»çºã«è¡ããã¦ããã®ã§ã³ã¤ãã使ã£ã¦èªç¤¾ãã¼ã¸ããªãã¥ã¼ã¢ã«ãã¦ãããã¨æãã¾ãã
ä»ã®ã¡ã³ãã¼ã®ããã°ã¨ã³ããª
æ¢ã«ããã¤ãããã°ã¨ã³ããªãä¸ãã£ã¦ããã®ã§ãªã³ã¯ãã¨ãã¾ãã
rei19.hatenablog.com blog.shibayan.jp rfp.hatenablog.com minato128.hateblo.jp
次å
帰ãã«ã次åã¯ã©ãã«è¡ããããªãã¨è©±ãã¦ãã¦
- 秩ç¶ï¼ãã®è±ï¼
- å®æ²»ï¼é¿ãï¼ã¦ã¼ãã©ãã¢ã ï¼
ãããããããããªãã¦è©±ãã¦ã¾ãããã¿ããªã楽ããã£ããã¨è¨ã£ã¦ãããã®ã§ãã¾ãéå¬ãããã¨æãã¾ãã
詳解Swift#8(Chapter11 æ¡å¼µ)
ååã«ç¶ãã詳解Swiftã®åçµãç¶ããã
![詳解 Swift æ¹è¨ç 詳解 Swift æ¹è¨ç](http://ecx.images-amazon.com/images/I/51-XJjg8H%2BL._SL160_.jpg)
- ä½è : è»ååå¿
- åºç社/ã¡ã¼ã«ã¼: SBã¯ãªã¨ã¤ãã£ã
- çºå£²æ¥: 2015/12/25
- ã¡ãã£ã¢: åè¡æ¬
- ãã®ååãå«ãããã°ãè¦ã
chapter11 æ¡å¼µ
ç¶æ¿ãåãã®ãã®ã®ã³ã¼ãå¤æ´ãè¡ããã«ãæ¢ã«åå¨ãã¦ããåã«ã¡ã½ãããããããã£ã追å ã§ããæ©è½ãObjective-Cã§ã¯ãã«ãã´ãªãã¨å¼ã°ãã¦ããããããå¼·åã ã¨è¨ã£ã¦ããã
æ¡å¼µã®å®£è¨
extension åå: ãããã³ã« { ã¤ãã·ã£ã©ã¤ã¶ è¨ç®åãããã㣠ã¡ã½ãã ãã®ä»ã®å®ç¾© }
ã¨ããå®ç¾©ã®ä»æ¹ãããã
- æ¢åã®åã«å¯¾ããæ¡å¼µ
extension String { var length: Int { return self.characters.count } }
ã¯ã©ã¹ã«å¯¾ãã¦æ¡å¼µå®ç¾©ãããå ´åããµãã¯ã©ã¹ã«ãé©ç¨ãããããã ããã®æ¡å¼µã¯finalã§å®ç¾©ããããã®ã¨ã¿ãªãããã®ã§ãµãã¯ã©ã¹å´ã§å¤æ´ãããã¯ã§ããªãã
æ¡å¼µå®ç¾©ã¨ãããã³ã«ã¸ã®é©å
truct Ounce { var mL:Double = 0.0 static let ounceUS = 29.5735 init(ounce:Double) { self.ounce = ounce } var ounce: Double { get { return mL / Ounce.ounceUS } set { mL = newValue * Ounce.ounceUS } } }
ãã®Ounceæ§é ä½ã«ãããã³ã«æ¡å¼µãå®ç¾©ããã¨ä»¥ä¸ã
:walking: extension Ounce : FloatLiteralConvertible { init(floatLiteral value: Double) { self.init(ounce: value) } }
ãããã³ã«æ¡å¼µ
- å¹´ææ¥ãæ´æ°å¤ã§è¡¨ç¾ãããããã³ã«
protocol Datable { var year: Int { get } var month: Int { get } var day: Int { get } }
ãã®ãããã³ã«ãæ¡å¼µãã¦ã¿ãã
protocol Datable { var year: Int { get } var month: Int { get } var day: Int { get } } // ãã§ã©ã¼ã®å ¬å¼ func Zeller(var m:Int, _ d:Int, var _ y:Int) -> Int { if m < 3 { m += 12; --y } let leap = y + y / 4 - y / 100 + y / 400 return (leap + (13 * m + 8) / 5 + d) % 7 } extension Datable { var dayOfWeek: Int { return Zeller(month, day, year) } } struct Date : Datable { var year, month, day: Int } let d1 = Date(year:1992, month:7, day:19) print(d1) print(d1.dayOfWeek)
ãããã³ã«ãæ¡å¼µãããã¨ã§ãã¡ã½ãããæ·»åä»ããªã©å®è£ ãæ¡å¼µãããã¨ãã§ããããããã³ã«æ¡å¼µã§å®ç¾©ããã¡ã½ãããªã©ã®å®è£ 㯠æ¢å®å®è£ ã¨å¼ã¶ã
- 2ã¤ã®ãããã³ã«æ¡å¼µ
protocol DateType { var year: Int { get } var month: Int { get } var day: Int { get } var area: String? { get } } extension DateType { func toString() -> String { return "\(year). \(month). \(day)" } } protocol TimeType { var hour: Int { get } var minute: Int { get } var area: String? { get } } extension TimeType { func toString() -> String { var s = (hour < 10 ? " " : "") + "\(hour)" s += ":" + (minute < 10 ? "0" : "") + "\(minute)" if let a = area { s += " (\(a))" } return s } } struct Date : DateType, TimeType { let year, month, day: Int let hour, minute: Int let area: String? init(_ y:Int, _ m:Int, _ d:Int, _ t:(Int, Int), area:String? = nil) { year = y; month = m; day = d; (hour, minute) = t; self.area = area } }
ãããã³ã«æ¡å¼µã®æ¢å®å®è£ ã¯å®£è¨(éç)ã§ãããã¯ã©ã¹ã®ç¶æ¿ã®ããã«åçã«åä½ãããã®ã§ã¯ãªãã
ææã»éæ
- ãããã³ã«ã®æ¡å¼µã¯ä¾¿å©ã«ä½¿ããã
- Stringç³»ã®ãããã³ã«ã«ãã°åºåç³»å¦çãæ¡å¼µã«æ¸ãã¨ã
- ãããã³ã«æ¡å¼µã®æ¢å®å®è£ ã¯å®ç¾©ãããããã³ã«ã®ä½¿ãæ¹ã¨ãããå©ç¨ãããç¨åº¦è¦å®ã§ããæ°ãããã®ã§æå³ããªã使ãæ¹ãé²ããã
詳解Swift#7(Chapter10 ãããã³ã«)
ååã«ç¶ãã詳解Swiftã®åçµãç¶ããã
![詳解 Swift æ¹è¨ç 詳解 Swift æ¹è¨ç](http://ecx.images-amazon.com/images/I/51-XJjg8H%2BL._SL160_.jpg)
- ä½è : è»ååå¿
- åºç社/ã¡ã¼ã«ã¼: SBã¯ãªã¨ã¤ãã£ã
- çºå£²æ¥: 2015/12/25
- ã¡ãã£ã¢: åè¡æ¬
- ãã®ååãå«ãããã°ãè¦ã
chapter10 ãããã³ã«
ã³ã¬ããåã®ç« ã§ãã¡ããã¡ããåºã¦ãã¦ãããããã³ã«ã«ã¤ãã¦ã®è©±ããããã³ã«ã¯ å®è£ ãä¼´ããªã宣è¨ã®éå ã¨æ¸ãã¦ãããã¤ã³ã¿ãã§ã¼ã¹ã«ããä¼¼ã¦ãããã¤ã³ã¿ãã§ã¼ã¹ã®ç¶æ¿ã®ããã«ã¤ã³ã¹ã¿ã³ã¹ãã©ã®ãããªæ©è½ãæã¤ããã¨ãããã¨ãSwiftã§ã¯ãããã³ã«ã§å®ç¾ãã¦ãã¦
- ã¯ã©ã¹
- æ§é ä½
- åæå
ã®ããããã«ãããã³ã«ã使ã£ã¦æ¨æºã©ã¤ãã©ãªãæã¤æ©è½ãç¶æ¿ã§ãããããã
ãããã³ã«ã®å®£è¨
ãããã³ã«åã¯ãã£ã¡ã«ã±ã¼ã¹ã®å¤§æåéå§ã§å®£è¨ããã
CustomStringConvertible
ã®å®ç¾©stdlib/public/core/OutputStream.swift
ã«å®ç¾©ããã¦ã- https://github.com/apple/swift/blob/55be501ad6d4d103db7b4ba303aa54343acaa779/stdlib/public/core/OutputStream.swift#L54
/// `CustomStringConvertible` public protocol CustomDebugStringConvertible { /// A textual representation of the instance, suitable for debugging. var debugDescription: String { get } }
ãããã³ã«ã«å«ãããã¨ãã§ãã宣è¨
- ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãããã¿ã¤ãã¡ã½ãã
- ã¤ã³ã¹ã¿ã³ã¹ããããã£ãã¿ã¤ãããããã£
- æ¼ç®åã«ããé¢æ°ã®å®£è¨
- ã¤ãã·ã£ã©ã¤ã¶
- æ·»åä»ã
- typealias
ã«ã³ã¿ã³ãªä¾
protocol Personal { var name: String { get } init(name: String) func sayHelloto(p:Personal) func saySomething() -> String }
ã¡ã½ããã¯å®£è¨ã ããã¦ãã³ã¼ãããã㯠{}
ã¯è¨è¿°ããªãã
- ã¤ãã·ã£ã©ã¤ã¶
ãããã³ã«ã®ã¤ãã·ã£ã©ã¤ã¶ã¯ãç¶æ¿ããã¯ã©ã¹ã§ã¯å¿
é ã¤ãã·ã£ã©ã¤ã¶ã¨ãªãã®ã§ã required
修飾åãä»ããå¿
è¦ãããã
protocol Personal { var name: String { get } init(name: String) func sayHelloTo(p:Personal) func saySomething() -> String } class Citizen: Personal { let name: String required init(name: String) { self.name = name } func sayHelloTo(p: Personal) { print("ã©ããã \(p.name) ãã") } func saySomething() -> String { return "ãªãã»ã©" } } var ct = Citizen(name: "kentana") var ct2 = Citizen(name: "tanaken") ct.saySomething() // ãªãã»ã© ct.sayHelloTo(ct2) // ã©ããã tanaken ãã ct2.sayHelloTo(ct) // ã©ããã kentana ãã
- ã¯ã©ã¹å®ç¾©ã®ããã®ãããã³ã«
- ç¨éãã¯ã©ã¹ã«éå®ããã¦ãããããã³ã«ã¯
protocol ãããã³ã«å: class {
ã¨æ¸ã
- ç¨éãã¯ã©ã¹ã«éå®ããã¦ãããããã³ã«ã¯
ãããã³ã«ã¨å
ãããã³ã«ã¯åã¨ãã¦ã使ãããï¼ã¨ããããâã®ä¾ã§æ¢ã«å¼æ°ã®åã¨ãã¦Personalã使ã£ã¦ãï¼
- ãããã³ã«ã®ç¶æ¿
- ç¶æ¿ããã¨ãã¯ã¯ã©ã¹åæ§ã«
:
ã®å¾ãã«ãã¼ã¹ãããã³ã«ãæ¸ã
- ç¶æ¿ããã¨ãã¯ã¯ã©ã¹åæ§ã«
enum Sex { case Male, Female } protocol HealthInfo: Personal { // Personalãç¶æ¿ var weight: Double { get set } var height: Double { get set } var sex: Sex? { get } }
- ãããã³ã«ã®åæ
- æ¢åã®ãããã³ã«ãè¤æ°çµã¿åããã¦ãæ°ãããããã³ã«ãå®ç¾©ãã¦ãããããå®ç¾©ããã¨ãè¤æ°ã®ãããã³ã«ã®éåã¨ãã¦ã®åãæå®ãã¦ããããããã¯ä¾¿å©ãªäºæã
// æ°ããåæãããããã³ã«ãå®ç¾© protocol HelthyPerson: Healthy, Personal {} // å®ç¾©ããã«åæãã¦åã¨ãã var teller: protocol<Healthy, Personal>
- ãããã³ã«ã®é©åã®è©ä¾¡
exp is P // é©åãã¦ããå ´åã¯true, ãã¦ããªãå ´åã¯false exp as P // ãããã³ã«Påã«ãã£ã¹ãããããé©åãã¦ãªãå ´åã¯å®è¡æã¨ã©ã¼ exp as? P // ãããã³ã«Påã«ãã¦ã³ãã£ã¹ãããããé©åãã¦ãªãå ´åã¯nil exp as! P // ãããã³ã«Påã«ãã¦ã³ãã£ã¹ãããããé©åãã¦ãªãå ´åã¯å®è¡æã¨ã©ã¼
- ãªãã·ã§ã³é
ç®ã®ãããããã³ã«
- ãããã³ã«ã®ä¸ã§å¿ é ã§ã¯ãªãã¡ã½ãããããããã£ã宣è¨ã§ãã
@objc
修飾ã®ãããããã³ã«ã®ã¿ã§å©ç¨å¯è½optional
修飾åãã¤ãã- æ»ãå¤ã¯ãªãã·ã§ãã«åã¨ãªã
@objc protocol PersonalData { var name: String { get } optional avr bloodtype: String { get } optional func age() -> Int } var p: PersonalData = ... if let btype = p.bloodtype { print(btype) } if let a = p.age?() { print("hoge") }
ãããã³ã«ã¨ä»å±å
- ãããã³ã«å
ã§ä»å±åãå®ç¾©ãããã¨ã§ããã®ãããã³ã«ãç¶æ¿ããæ§é ä½/ã¯ã©ã¹ãä»å±åãä»»æã«æ±ããã¨ãã§ãã
- ä»å±åã«ã¯ãããã³ã«åãè¨è¿°ãããã¨ã§ãé©åããåãå¶éãããã¨ãã§ãã
protocol VectorType { typealias Element var x : Element { get set } var y : Element { get set } } struct VectorFloat : VectorType { var x, y: Float func convToDouble() -> VectorDouble { return VectorDouble( x: VectorDouble.Element(x), y: VectorDouble.Element(y)) } } struct VectorDouble : VectorType, CustomStringConvertible { var x, y: Double var description: String { return "[\(x), \(y)]" } } struct VectorGrade : VectorType { enum Element { case A, B, C, D, X } var x, y: Element } var a = VectorFloat(x: 10.0, y: 12.0) print("x:\(a.x), y:\(a.y)") let b = a.convToDouble() print(b) // [10.0, 12.0] var g = VectorGrade(x: .A, y: .C) print(g) // VectorGrade(x: VectorGrade.Element.A, y: VectorGrade.Element.C)
ãããã³ã«ã«é©åããåã®å®ç¾©æ¹æ³
Swiftã®ãã¼ã¿åã®å¤ãã¯æ§é ä½ã§å®ç¾©ããã¦ãããããã®æ§é ä½ãæ¨æºã®ãããã³ã«ã使ã£ã¦ãããããã«åãããå½¢ã§å®ç¾©ãããã¼ã¿åãæ¨æºã®ãããã³ã«ã«é©åãããã¨ãæ¢åã®ãã¼ã¿åã¨åãããã«ä½¿ãããããã¯ç¢ºãã«ãããããããªãã
- Comparable / Equatable
- æ¯è¼æ¼ç®åã使ããããã«ãªã
- ForwardIndexType
for-in
ã§ç¹°ãè¿ãã§ããããã«ç¯å²ãä½ãã
enum WeekDay: Int, ForwardIndexType { case Sun, Mon, Tue, Wed, Thu, Fri, Sat case _dummy func successor() -> WeekDay { if self == ._dummy { return ._dummy } return WeekDay(rawValue: self.rawValue + 1)! } } var d = WeekDay.Sun print(d.rawValue) // 0 print(d.successor().rawValue) // 1 var r = Range<WeekDay>(start:.Mon, end:.Fri) for i in WeekDay.Sun ... WeekDay.Sat { print(i.rawValue, terminator:" ") // 0 1 2 3 4 5 6 } for i in WeekDay.Mon ... .Sat { print(i.rawValue, terminator:" ") // 1 2 3 4 5 6 }
- ç¶æ¿çµ¡ã¿ã®ãããã³ã«
protocol Copyable { func copy() -> Self } class GeoPoint : Copyable, Equatable, CustomStringConvertible { let latitude: Double // 緯度 let longitude: Double // çµåº¦ required init(lat:Double, lon:Double) { // å¿ é ã¤ãã·ã£ã©ã¤ã¶ self.latitude = lat self.longitude = lon } func copy() -> Self { let nw = self.dynamicType.init(lat:latitude, lon:longitude) return nw } var description: String { return "GeoPoint:\(latitude), \(longitude)" } } func == (lhs:GeoPoint, rhs:GeoPoint) -> Bool { return lhs.latitude == rhs.latitude && lhs.longitude == rhs.longitude }
ç¶æ¿ã絡ãã§æ¥ãå ´åãSelfã§ã¯ãªã self.dynamicType
ã使ããªãã¨ãµãã¯ã©ã¹å´ããå¼ã³åºãããå ´åã«ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãåç
§ãã¦ãã¾ãã®ã§æ³¨æãå¿
è¦ã
ææã»éæ
- ãããã³ã«ã¯C#, Javaãªã©ã§ããã¨ãã®ã¤ã³ã¿ãã§ã¼ã¹ãç¹ã«éåæãªã使ããã
- Swiftæ¨æºãæèãã¦ããã°ã©ã ãæ¸ãã¨ãããã³ã«ã«é©åããããã«ãªãã®ãããããªã
- ãããã³ã«ã®åæã¯ã¤ã³ã¿ãã§ã¼ã¹ã®çµã¿åãããèªå¨ã«å®ç¾©ã§ããã®ã§ãã·ã³ãã«ãªãããã³ã«ãããã¤ãå®ç¾©ãã¦ãããã¦ãããããçµã¿åããã¦ããªã便å©ã«ä½¿ããã
@objc
修飾å㯠Objective-C ã¨çµã¿åãããæå³ã¯ãªãããªãã·ã§ãã«ã®é ç®ãä½ãããå ´åã§ãå®ç¾©ã§ããã®ã¯ååãç´æçã§ãªãã®ã§ã¤ãã¤ãæãããããã¦@objc
修飾ãããããã³ã«ã¯ã¯ã©ã¹ã§ãã使ããªããããã¯è¦ããããæ°ãããªãã®ã§ãå®æ¦ã§æ´ãã§ãããªãã¨ãããã- ä»å±åã¯ã¡ãã£ã¨ããããããªããã¨ããããè¤éãªã³ã¼ãã«ãªã£ãã¨ãã«æ´»èºããããªã®ã§ããã¾ã¯ã¾ã è©ä¾¡ã§ããªãã¨ããå°è±¡
- Selfé£ããã
詳解Swift#6(Chapter9 ã¡ã¢ãªç®¡ç)
ååã«ç¶ãã詳解Swiftã®åçµãç¶ããã
![詳解 Swift æ¹è¨ç 詳解 Swift æ¹è¨ç](http://ecx.images-amazon.com/images/I/51-XJjg8H%2BL._SL160_.jpg)
- ä½è : è»ååå¿
- åºç社/ã¡ã¼ã«ã¼: SBã¯ãªã¨ã¤ãã£ã
- çºå£²æ¥: 2015/12/25
- ã¡ãã£ã¢: åè¡æ¬
- ãã®ååãå«ãããã°ãè¦ã
chapter9 ã¡ã¢ãªç®¡ç
Swiftã§ã¯
- ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹
- ã¯ãã¼ã¸ã£
ã®ã¿ãåç §åã®ãã¼ã¿ãå¤ãã®å ´åã¯ã¡ã¢ãªç®¡çãæèããªãã¦ãããï¼ãã³ããï¼ï¼ããç¹å®ã®ç¶æ³ä¸ã§ã¯ãªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ã¯ãããã¡ã¢ãªç®¡çã®æ¦è¦ãææ¡ãã¦ããã¹ããã¨æ¸ããã¦ããã
åç §åãã¼ã¿ã¨ARC
- ãªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ã®æ¦å¿µ
class Person : CustomStringConvertible { let name:String var age:Int init(name:String, age:Int) { self.name = name; self.age = age } var description: String { return "\(name), \(age)" } deinit { print("\(name): deinit") } } var yuta:Person! = Person(name:"å太", age:16) print(yuta) var x:Person! = yuta x.age++ print(yuta) print(yuta === x) yuta = nil // ããã§ã¯ãªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ã 2 -> 1 ã«ãªãã ããªã®ã§ãdeinitãããªã x = nil //ããã§ãªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ã0ã¨ãªãã®ã§ã deinitããã
æ¼ç®åã®è©±: ===
åä¸æ§ã調ã¹ãã !==
åä¸ã§ãªããã¨ã調ã¹ãã
- ARC(ã¢ã¼ã¯)
- ã³ã³ãã¤ã«æã«ãªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ã®å¢æ¸ã¿ã¤ãã³ã°ã決å®ããã¡ã¢ãªç®¡çæ¹å¼
- Objective-C ã§ã¯æåã§ç®¡çãã¦ãã
å¼·ãåç §ã®å¾ªç°
- ã¤ã³ã¹ã¿ã³ã¹ã解æ¾ãããªãä¾
class Student : CustomStringConvertible { let name: String // åå var club: Club? // æå±ã¯ã©ã init(name:String) { self.name = name } var description: String { var s = "\(name)" if let mem = club { s += ", \(mem.name)" } return s } deinit { // ãã¤ãã·ã£ã©ã¤ã¶ print("\(name): deinit") } } class Club { let name: String // ã¯ã©ãå var members = [Student]() // æå±å¦çã®ãªã¹ã init(name:String) { self.name = name } func add(p:Student) { // å¦çã追å ãã members.append(p) p.club = self // å¦çã®æå±ãæ¸ãæãã } deinit { // ãã¤ãã·ã£ã©ã¤ã¶ print("Club \(name): deinit") } } var tinyClub: Club! = Club(name:"æ¼å¯å好ä¼") var yuji:Student! = Student(name:"æ äº") tinyClub.add(yuji) print(yuji) yuji = nil // deinitãããªã tinyClub = nil // deinitãããªã
ã¤ã³ã¹ã¿ã³ã¹ã®å¾ªç°åç §ãçºçãã¦ããå ´åã¯ARCã«ãã£ã¦ã¡ã¢ãªè§£æ¾ãããªã
- å¼±åç
§ / å¼·åç
§
- å¼±åç
§
weak
修飾åãå¤æ°ã®åã«ä»ãã- ãªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ã®å¤ã«å½±é¿ããªã
- å¼·åç
§
- é常ã®åç §
- ãªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ã®å¤ã«å½±é¿ãã
- å¼±åç
§
åç §ã®ç¨®é¡ | å®ç¾©ã®ä»æ¹ | ãªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ã¸ã®å½±é¿ | åè |
---|---|---|---|
å¼±åç § | weak 修飾åãä»ä¸ |
ãªã | ãªãã·ã§ãã«åã§ããå¿ è¦ããã |
å¼±åç § | é常ã®å¤æ°å¼ã³åºã | ãã |
ã¾ã¨ããã¨ãããªæãã§ããã
- éææåç §
å¼±åç
§ã¨åæ§ã«ãªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ã«å½±é¿ããªãåç
§æ¹æ³ã unowned
修飾åãä»ãããåã«ãªãã·ã§ãã«ã¯æå®ã§ããªãããå¤æ°ã®å¤ãnilã«ãªããªããã¨ãæãããªå ´åãã¯å¼±åç
§ã§ã¯ãªããéææåç
§ã使ãæ¹ãé«éã«åä½ããAppleãæ¨å¥¨ãã¦ããã
var hg1: Hoge! = Hoge() unowned var hg2: Hoge = hg1 print(hg2) // Hoge hg1 = nil //print(hg2) <- error
åç §å ã解æ¾ãããå¾ã§åç §ããã¨å®è¡æã¨ã©ã¼ã¨ãªãã
ãªãã·ã§ãã«ãã§ã¼ã³
ãªãã·ã§ãã«åã¯ããããã£ãã¡ã½ããã®è¿ãå¤ã§ãnilãè¿ãå¯è½æ§ãããå ´åã«ä½¿ãããããªãã·ã§ãã«åã®å¤ã !
ã§é示ãã¦ä½¿ç¨ããå ´åããã®å¤ãnilãªã®ãããã§ãã¯ããªããã°ãããªãã
- ãªãã·ã§ãã«æç¸æ§æ
if let x = ãªãã·ã§ãã«å
çãªã¢ã¬
- nilåä½æ¼ç®å
??
ã§è¡¨ãèªå·±ä»£å ¥çãªã¢ã¬
ãªã©ã®è¨è¿°ãç¨æããã¦ãããããªãã·ã§ãã«ãã§ã¼ã³ããã®1ã¤ã
- ãªãã·ã§ãã«ãã§ã¼ã³
class Student { let name: String // åå weak var club: Club? // å¼±ãåç § init(name:String) { self.name = name } } class Teacher { let name: String // åå var subject: String? = nil // æ å½æç§ init(name:String) { self.name = name } } class Club { let name: String // åå weak var teacher: Teacher? // å¼±ãåç § var budget = 0 // äºç® var members = [Student]() init(name:String) { self.name = name } func add(p:Student) { members.append(p) p.club = self } func legal() -> Bool { // å ¬èªã¯ã©ããï¼ return members.count >= 5 && teacher != nil } } var who: Student? = Student(name: "kentana20") //who!.club!.teacher!.name <- error if let w = who { if let cl = w.club { if let tc = cl.teacher { print(tc.name) } } } // âããªãã·ã§ãã«ãã§ã¼ã³ã§æ¸ãã¨â if let name = who?.club?.teacher?.name { print(name) }
!
ã«ããé示ã®ä»£ããã« ?
ã使ã£ã¦ç®çã®å¤ãè¨è¿°ãããã©ããã§nilãè¿ãå ´åã¯ãªãã·ã§ãã«ãã§ã¼ã³ã®å¤ã¯nilã¨ãªãããå¤ãããå ´åã¨ãªãå ´åã§å¦çãç°ãå ´åãã¯éå®ãããã
- ãªãã·ã§ãã«ãã§ã¼ã³ã§ã¡ã½ããå¼ã³åºã
var recognized = who?.club?.legal()
ãã®å ´åãrecognizedã¯Bool?å(ãªãã·ã§ãã«)ã¨ãªãã
ææã»éæ
- åç §åã®ãã¼ã¿ãæ±ãå ´åã¯ãªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ãæèããªãã¨ãããªã
- å¼±åç §(weak) / éææåç §(unowned) ããã¾ã使ãã°åç §å¾ªç°ãä½ãããã¡ã¢ãªã«ããããå¦çã«ãªã
- ãªãã·ã§ãã«ãã§ã¼ã³ã¯å®£è¨çã«æ¸ãã¦ããããå¤ã¯ãªãã·ã§ãã«åã§ãããã¨ã«æ³¨æãã
詳解Swift#5(Chapter8 ã¯ã©ã¹)
ååã«ç¶ãã詳解Swiftã®åçµãç¶ããã
![詳解 Swift æ¹è¨ç 詳解 Swift æ¹è¨ç](http://ecx.images-amazon.com/images/I/51-XJjg8H%2BL._SL160_.jpg)
- ä½è : è»ååå¿
- åºç社/ã¡ã¼ã«ã¼: SBã¯ãªã¨ã¤ãã£ã
- çºå£²æ¥: 2015/12/25
- ã¡ãã£ã¢: åè¡æ¬
- ãã®ååãå«ãããã°ãè¦ã
chapter8 ã¯ã©ã¹
ã¯ã©ã¹å®ç¾©
æ§é ä½ã¨ã¯ç°ãªããã¯ã©ã¹ã§ã¯ å ¨é ç®ã¤ãã·ã£ã©ã¤ã¶ã使ããªã(ã«ãã»ã«åã®ææ³ã¨ç¸æ§æª)ã
class Time { var hour = 0, min = 0 init(hour:Int, min:Int) { self.hour = hour; self.min = min } func add(min:Int) { // mutatingã¯ä¸è¦ let m = self.min + min if m >= 60 { self.min = m % 60 let t = self.hour + m / 60 self.hour = t % 24 }else{ self.min = m } } func inc() { // mutatingã¯ä¸è¦ self.add(1); } func toString() -> String { let h = hour < 10 ? " \(hour)":"\(hour)" let m = min < 10 ? "0\(min)":"\(min)" return h + ":" + m } } let t1 = Time(hour:13, min:20) let t2 = t1 print(t1.toString()) // 13:20 ãåºå t1.inc() print(t2.toString()) // 13:21 ãåºå
- ã¯ã©ã¹ã®ç¶æ¿
- ã¯ã©ã¹ãç¶æ¿ããå ´åãã¡ã½ãããããããã£ãªã©æ®ã©ã®ãã®ã¯å¼ãç¶ãããã¤ãã·ã£ã©ã¤ã¶ã¯ç¶æ¿ããªã
override
ãã¼ã¯ã¼ãã§ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¡ã½ããããªã¼ãã¼ã©ã¤ãã§ãã- ãµãã¯ã©ã¹ã®å®ç¾©ã¯
self.
, ã¹ã¼ãã¼ã¯ã©ã¹ã®å®ç¾©ã¯super.
ãã¼ã¯ã¼ãã使ã
class ã¯ã©ã¹å: ã¹ã¼ãã¼ã¯ã©ã¹å { }
ã§æ¸ããã
// Timeãç¶æ¿ããããã³ã«ãæ¡ç¨ class Time12 : Time, CustomStringConvertible { var pm:Bool // æ°ããã¤ã³ã¹ã¿ã³ã¹å¤æ°ãåå¾ãªãç init(hour:Int, min:Int, pm:Bool) {// æ°ããã¤ãã·ã£ã©ã¤ã¶ self.pm = pm super.init(hour:hour, min:min) } // ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¤ãã·ã£ã©ã¤ã¶ãå¼ã³åºãã¦ä½¿ã override convenience init(hour:Int, min:Int) { // 24æå¶ let isPm = hour >= 12 self.init(hour:isPm ? hour - 12 : hour, min:min, pm:isPm) } // ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¤ãã·ã£ã©ã¤ã¶ãä¸æ¸ããã override func add(min:Int) { // ã¡ã½ãããä¸æ¸ã super.add(min) // ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¡ã½ãã while hour >= 12 { // hourã¯ã¹ã¼ãã¼ã¯ã©ã¹ã®å®ç¾© hour -= 12 pm = !pm } } var description : String {// ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¡ã½ãããå©ç¨ return toString() + " " + (pm ? "PM" : "AM") } }
convenience
ã¯ä»ã®ã¤ãã·ã£ã©ã¤ã¶(ãã®ä¾ã ã¨ç´ä¸ã®ã¤ãã·ã£ã©ã¤ã¶)ã«å¦çãå§è²ããå ´åã«ä½¿ãã CustomStringConvertible
ã¯ãããã³ã«ã description
ãã¤ã㦠print(Time12åã®ã¤ã³ã¹ã¿ã³ã¹)
ã§æ¨æºåºåãå¯è½ã«ããã
ãããé¤ãã¨æ¸ãã¦ããã¨ã¯çµæ§ã·ã³ãã«ã
åççµåã¨ãã£ã¹ã
is
æ¼ç®åã§åçã«ã¤ã³ã¹ã¿ã³ã¹ã®åã調ã¹ãããas
,as?
,as!
ã§ãã£ã¹ãã§ãã
ã¯ã©ã¹ã¡ã½ãã / ã¯ã©ã¹ããããã£
class
ãã¼ã¯ã¼ãã§æ¸ãã¡ã½ããã¨ããããã£- ã¿ã¤ãããããã£ã¨ã¯ç°ãªãããµãã¯ã©ã¹ã§ã®ä¸æ¸ããã§ãã(ã¿ã¤ãã¡ã½ããã»ã¿ã¤ãããããã£ã¯ãµãã¯ã©ã¹ã§ã¯ä¸æ¸ãã§ããªã)
- ã¯ã©ã¹ããããã£ã¯è¨ç®åã«éå®ããã¦ãã¦ãæ ¼ç´åã¯å®ç¾©ã§ããªã
class A : CustomStringConvertible { static var className : String { return "A" } // è¨ç®åã¿ã¤ããããã㣠static var total = 0 // æ ¼ç´åã¿ã¤ããããã㣠class var level : Int { return 1 } // è¨ç®åã¯ã©ã¹ãããã㣠static func point() -> Int { return 1000 } // ã¿ã¤ãã¡ã½ãã class func say() -> String { return "Ah." } // ã¯ã©ã¹ã¡ã½ãã init() { ++A.total } var description: String { return "\(A.total): \(A.className), " + "Level=\(A.level), \(A.point())pt, \(A.say())" } } class B : A { // override static var className : String { return "B" } // å®ç¾©ä¸å¯. error: class var overrides a 'final' class var // static var total = 0 // å®ç¾©ä¸å¯. error: cannot override with a stored property 'total' override class var level : Int { return 2 } // override static func point() -> Int { return 2000 } // å®ç¾©ä¸å¯. error: class method overrides a 'final' class method override class func say() -> String { return "Boo" } override init() { super.init(); ++B.total } override var description: String { return "\(B.total): \(B.className), " + "Level=\(B.level), \(B.point())pt, \(B.say())" } } let a = A() print(a) let b = B() print(b)
ãããªæãã
ã¯ã©ã¹ã®ã¤ãã·ã£ã©ã¤ã¶
Swiftã§ã¯ããã¼ã¹ã¯ã©ã¹ãç¶æ¿ãã¦ä½ããã¦ããã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãæ£ããã¤ããããã«ãã¤ãã·ã£ã©ã¤ã¶ã«ã¯ããã¤ãã®ã«ã¼ã«ãããã
ç¨èªã®è©±
- æå®ã¤ãã·ã£ã©ã¤ã¶
- ãã®ã¤ãã·ã£ã©ã¤ã¶ã ãã§ãã¤ã³ã¹ã¿ã³ã¹ã®åæåãå®äºãã
- ç°¡æã¤ãã·ã£ã©ã¤ã¶
- ã»ãã®ã¤ãã·ã£ã©ã¤ã¶ã使ã£ã¦ã¤ã³ã¹ã¿ã³ã¹ã®åæåããã
- ã»ãã®ã¤ãã·ã£ã©ã¤ã¶ã使ã£ã¦åæåãä»»ãããã¨ãããªã²ã¼ãã¨å¼ã¶
convenience
ã¨ãããã¼ã¯ã¼ããä»ãã
ã©ã®ã¯ã©ã¹ãæå®ã¤ãã·ã£ã©ã¤ã¶ãæä½1ã¤ã¯åãã¦ããå¿ è¦ãããã
- ã¤ã³ã¹ã¿ã³ã¹ã®ã¤ãã·ã£ã©ã¤ãºã®æ¦å¿µ
ããã¯âã®ç»åãè¦ãã®ãä¸çªç解ãæ©ãã
- ç°¡æã¤ãã·ã£ã©ã¤ã¶
- æå®ã¤ãã·ã£ã©ã¤ã¶
- ã¹ã¼ãã¼ã¯ã©ã¹ã®æå®ã¤ãã·ã£ã©ã¤ã¶
- ...
ã¨ããé åºã§ã¤ãã·ã£ã©ã¤ãºãããã
ã¤ãã·ã£ã©ã¤ãºæã®å¶ç´ãçµæ§ããã
- æå®ã¤ãã·ã£ã©ã¤ã¶ã¯ã¯ã©ã¹ã§è¿½å ããã¦ããå¤æ°ãå®æ°ã®åæåãããªããã°ãããªã
- ãµãã¯ã©ã¹ã®ã¤ãã·ã£ã©ã¤ã¶ã¯ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¤ãã·ã£ã©ã¤ãºãçµããã¾ã§ã¯ã¹ã¼ãã¼ã¯ã©ã¹ã§å®ç¾©ããã¦ããå¤æ°ãå®æ°ãæ±ããã¨ã¯ã§ããªã
ç°¡æã¤ãã·ã£ã©ã¤ã¶ã¯æå®ã¤ãã·ã£ã©ã¤ã¶ã®åæåå¦çãçµããã¾ã§å¤æ°ãå®æ°ãæ±ããã¨ã¯ã§ããªã
ç¶æ¿ãã¦ããã¯ã©ã¹ã®ã¤ãã·ã£ã©ã¤ã¶ã®ãµã³ãã«
// Zellers congruence func dayOfWeek(var m:Int, let _ d:Int, var year y:Int) -> Int { if m < 3 { m += 12; --y } let leap = y + y / 4 - y / 100 + y / 400 return (leap + (13 * m + 8) / 5 + d) % 7 } // base class class DayOfMonth : CustomStringConvertible { var month, day: Int init(month:Int, day:Int) { self.month = month; self.day = day } var description: String { return DayOfMonth.twoDigits(month) + "/" + DayOfMonth.twoDigits(day) } class func twoDigits(n:Int) -> String { let i = n % 100 if (i < 10) { return "0\(i)" } return "\(i)" } } // sub class1 class Date: DayOfMonth { var year: Int var dow: Int init(_ y:Int, _ m:Int, _ d:Int) { year = y dow = dayOfWeek(m, d, year: y) super.init(month: m, day: d) } } // sub class2 class DateW : Date { static let namesOfDay = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ] var dweek = String() // æå®ã¤ãã·ã£ã©ã¤ã¶(ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¤ãã·ã£ã©ã¤ã¶ã¨å¼æ°ãåããªã®ã§overrideãã) override init(_ y:Int, _ m:Int, _ d:Int) { super.init(y, m, d) dweek = DateW.namesOfDay[dow] } // ç°¡æã¤ãã·ã£ã©ã¤ã¶ convenience init(_ m: Int, _ d:Int, year:Int = 2016) { self.init(year, m, d) } // ããããã£ãªãã¶ã¼ã(didSetãªã®ã§ãdayã®å¤ãå¤æ´ããç´å¾ã«çºåãã) override var day:Int { didSet { dow = dayOfWeek(month, day, year:year) dweek = DateW.namesOfDay[dow] } } // printã§å¼ã°ããããããã£ã®ä¸æ¸ã(æ¬è³ªã§ã¯ãªã) override var description: String { return "\(year)/" + super.description + " (\(dweek))" } } var d = DateW(1991, 5, 8) print(d, terminator:"") // 1991/05/08(Wed) d.day++ print(d, terminator:"") // 1991/05/09(Thu)
ããã¾ã§æ¸ããã¨ããã§ãåæåã«ã¤ãã¦ã®ã¾ã¨ãã
- ãã¿ã¼ã³å
±é(ãã¹ã¦ã®ã±ã¼ã¹ã«å½ã¦ã¯ã¾ã)
- ããããã£ã®å¤ããã¹ã¦è¨å®ãããã¾ã§ãå¦çã¯ã§ããªã
- ããããã£ã«åæå¤ãããå ´åã¯ã¤ãã·ã£ã©ã¤ã¶ã§åæåããªãã¦ããã
- ãã¿ã¼ã³1: ã¹ã¼ãã¼ã¯ã©ã¹ããªãå ´å
- ã¤ãã·ã£ã©ã¤ã¶ã§åããããã£ã®å¤ãè¨å®ããã°OKãã·ã³ãã«
- ãã¿ã¼ã³2: åãã¯ã©ã¹ã®å¥ã®ã¤ãã·ã£ã©ã¤ã¶ã使ã(ããªã²ã¼ããã)å ´å
- ããªã²ã¼ãããã¤ãã·ã£ã©ã¤ã¶ã®å¼åºãå¾ã«å¤æ°ã®è¨å®ããç´ãã
- ãã¿ã¼ã³3: ã¹ã¼ãã¼ã¯ã©ã¹ãããå ´å
- ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¤ãã·ã£ã©ã¤ã¶ãå¼ã³åºãåã«èªèº«ã®ã¯ã©ã¹ã§å®ç¾©ãã¦ããå¤æ°ã»å®æ°ã®åæåãæ¸ãã§ããå¿ è¦ããã
å°ã端æã£ã¦ããã©ããããªæãã ã¨æãã¾ãã
ã¤ãã·ã£ã©ã¤ã¶ã®ç¶æ¿
ãµãã¯ã©ã¹ã§æå®ã¤ãã·ã£ã©ã¤ã¶ãå®ç¾©ãã¦ããªã
- ãµãã¯ã©ã¹ãã¹ã¼ãã¼ã¯ã©ã¹ã®æå®ã¤ãã·ã£ã©ã¤ã¶ããã¹ã¦æã£ã¦ãã
ãã®2ã¤ã®æ¡ä»¶ã®ã©ã¡ãããæºããå ´åã«ãµãã¯ã©ã¹ã§ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¤ãã·ã£ã©ã¤ã¶ãç¶æ¿ã§ããããããã2.ãã®æå³ãããããããªããã
- å¿ é ã¤ãã·ã£ã©ã¤ã¶
class ICCard { static let Deposit = 500 var money = 0 required init(charge:Int) { money = charge - ICCard.Deposit } } class Icocai : ICCard { static var serial = 0 let idnumber: Int init(id:Int, money:Int) { idnumber = id super.init(charge:money) } required init(charge:Int) { idnumber = ++Icocai.serial super.init(charge:charge) } } class Suiica : ICCard { var name = String() } var card = Suiica(charge:2000) print(card.money) // 1500 var mycard = Icocai(charge:2000) print(mycard.money) // 1500
required
ãªã¤ãã·ã£ã©ã¤ã¶ãæã¤ã¯ã©ã¹ãç¶æ¿ãããµãã¯ã©ã¹ã¯ãåãã¤ãã·ã£ã©ã¤ã¶ã®å®è£
ãå¿
é ã¨ãªãã
- 失æã®ããã¤ãã·ã£ã©ã¤ã¶
æå®ã¤ãã·ã£ã©ã¤ã¶ã®å ´åããã¹ã¦ã®å¤æ°ã»å®æ°ã®å¤ãè¨å®ãããã¾ã§ return nil
ã§ããªãããç°¡æã¤ãã·ã£ã©ã¤ã¶ã®å ´åã¯ãã¤ã§ã return nil
ã§ããã
é常ã失æã®ããã¤ãã·ã£ã©ã¤ã¶ã使ã£ã¦ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãä½ãã¨ãªãã·ã§ãã«åã«ãªãããæ§é ä½ã¨åããã !
ã§é示ããã¨ããªãã·ã§ãã«åã§ã¯ãªããªãã
ãã®è¾ºãã¯åºæ¬çã«æ§é ä½ã¨åãè¨è¨ææ³ã
ç¶æ¿ã¨ãµãã¯ã©ã¹ã®å®ç¾©
- ããããã£ã®ç¶æ¿
ã¹ã¼ãã¼ã¯ã©ã¹ã®ããããã£ï¼æ ¼ç´åãè¨ç®åã©ã¡ããï¼ãç¶æ¿ãã¦ä¸æ¸ãã§ãããåç
§ããã¨ã㯠super.ããããã£å
ã¨æ¸ãã
- ç¶æ¿ã¨ããããã£ãªãã¶ã¼ã
ã¹ã¼ãã¼ã¯ã©ã¹ã®ããããã£ãç£è¦ã§ãããè¨ç®åãæ ¼ç´åã®å¶éã¯ãªãã
class Propα { var attr = 0 } class Propβ : Propα { override var attr : Int { willSet{ print("β: will set") } didSet{ print("β: did set") } } } class Propγ : Propβ { override var attr : Int { willSet{ print("γ: will set") } didSet{ print("γ: did set") } } } var g = Propγ() g.attr = 1
- ç¶æ¿ããããªã
ãµãã¯ã©ã¹ã§ã®ç¶æ¿ããããããªãã¡ã½ãããããããã£ã¯ final
修飾åãå®ç¾©ã®å
é ã«ä»ãããfinal
修飾åãã¤ããã¡ã½ãããããããã£ãç¶æ¿/overrideãããã¨ããã¨ã³ã³ãã¤ã«æã«ã¨ã©ã¼ã¨ãªãã
- ç¶æ¿ã¨åæ¨è« / ã¯ã©ã¹ã®ã¡ã¿ã¿ã¤ã
ã¯ã©ã¹Aã¨ãã¯ã©ã¹Aãç¶æ¿ããã¯ã©ã¹Bã®ããããã®ã¤ã³ã¹ã¿ã³ã¹ãå«ãé åãã¤ããã¨ããã®é åã®åã¯ã¹ã¼ãã¼ã¯ã©ã¹ã§ããã¯ã©ã¹Aã¨ãªãã
class Hoge { var text: String init() { text = "hoge" } } class Fuga: Hoge { init(msg: String) { super.init() super.text = msg } } var h1 = Hoge() var f1 = Fuga(msg: "fuga") var array = [h1, f1] // [Hoge] array.dynamicType // Array<Hoge>.Type
xxxx.dynamicType
ã§å®éã«å±ããã¯ã©ã¹ã表ããªãã¸ã§ã¯ããè¿ããã³ã¬æ¬²ããã£ããã¤ã ã
解æ¾æå¦ç
- Swiftã§ã¯ã¤ã³ã¹ã¿ã³ã¹ã¯èªåçã«æ¶å»ããã
- ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¯åç §åãªã®ã§ãSwiftãå é¨ã«æã£ã¦ãããªãã¡ã¬ã³ã¹ã«ã¦ã³ã¿ã§ç®¡çãã¦ãã
- ãã¤æ¶å»ããããã¯å®è¡æã¾ã§ããããªã
- æ示çã«æ¶ããã¨ã§ããã¡ã¤ã«ã®ã¯ãã¼ãºãã¡ã¢ãªã®è§£æ¾ãè¡ããã¨ãã§ãã
解æ¾å¦çã ãã¤ãã·ã£ã©ã¤ã¶ ã¨ãã¶ã
deinit { }
ã§è§£æ¾å¦çãæ¸ãã
é å»¶æ ¼ç´åããããã£
åæåã®éã«ã¯å¤ã決ããã«ãå¿ è¦ã«ãªã£ãã¿ã¤ãã³ã°ã§åãã¦å¤ã決ããããããã£ã®ãã¨ã
ex. ç»åæ å ±ã®èªã¿è¾¼ã¿ - ç»åã¯ä½¿ããããããããªããã使ãããªããããããªã - ãã¹ã ãã¯åæåæã«æå®ãã¦ãã - ç»åãå¿ è¦ã«ãªã£ãã¿ã¤ãã³ã°ã§é 延èªã¿è¾¼ã¿ãè¡ããã¨ã§ãç»é¢åæåæã®å¦çãæ¸ããã
ãããªã¤ã¡ã¼ã¸ã lazy
ãã¼ã¯ã¼ããããããã£ã®å®£è¨ã®å
é ã«æ¸ãã
import Foundation class FileAttr { let filename: String // é å»¶æ ¼ç´åãããã㣠lazy var size:Int = self.getFileSize() init(file: String) { filename = file } func getFileSize() -> Int { var buffer = stat() stat(filename, &buffer) print("[getFileSize]") return Int(buffer.st_size) } } let d = FileAttr(file:"/Users/kentana20/Desktop/363.png") print(d.filename) print(d.size) // getFileSize() ãå¼ã°ãã print(d.size)
- ããã¤ãã®å¶éããã
- ã¯ã©ã¹ / æ§é ä½å®ç¾©ã®å é¨ã§ã®ã¿ä½¿ç¨å¯è½
- ããããã£ã¯å®æ°ã§ã¯ãªãå¤æ°ã¨ãã
- æ§é ä½ã®å ´åã§ãé
延è©ä¾¡ãå¼ãèµ·ããå¯è½æ§ã®ããã¡ã½ããã«ã¯
mutating
ãå¿ è¦ã¨ãªã - ããããã£ãªãã¶ã¼ãã¯æå®ã§ããªã
ææã»éæ
ã¯ã©ã¹
ã¤ãã·ã£ã©ã¤ã¶
- ã²ã¨ã¨ããã®ææ¡ã¯ãããã®ã®ã奥ãæ·±ããã¦å®æ¦çµé¨ç©ã¾ãªãã¨æã«é¦´æã¾ãªãã
- ã¤ãã·ã£ã©ã¤ã¶ã®ç¶æ¿ã¯æ£ç´ãã¾ã使ããã«ï¼ã¨ãããç¶æ¿èªä½ãããªã«ä½¿ããã«ï¼
super.init
ãåºæ¬å½¢ã¨ããã¹ãã ã¨æã£ã - ã¤ãã·ã£ã©ã¤ã¶ã¯ãããªã«ãã³ãã³å¢ãããã®ã§ã¯ãªãã®ã§ã¯ããªãã¹ãå¢ãããªãã»ããã¤ã³ã¹ã¿ã³ã¹ã®è¦éããæãããªãããã ã¨æããã
ç¶æ¿
- ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ãã®ã¾ã¾ã¨ãã£ãã¤ã¡ã¼ã¸
- ã¯ã©ã¹èªä½ãããããã£ãã¡ã½ããã®ç¶æ¿ã
final
ã§ã®å¶éãªã©ããããªã使ããã - ç¶æ¿ã®æèã§ã¯ãªããã Any, AnyObject åã¯ã©ãããã使ãã®ã ãããåã«å³å¯ãªSwiftã®ãããã¹ãã¤ã«ãã¦ãã¾ãããã
解æ¾å¦ç
- ãã¡ã¤ã«I/Oãã¡ã¢ãªå¤§é£ããªã©ã®å¦çãè¡ãã¯ã©ã¹ã«ã¤ãã¦ã¯
deinit
å¦çãæ示çã«æ¸ãã¦ãã£ãã»ãããã - ãã¤ãã£ãã¢ããªã®ã¡ã¢ãªç®¡çã¯ã·ãã¢ãããªã®ã§ããã¥ã¼ãã³ã°ãã³ã¼ãã¼ã±ã¼ã¹ã®ãããã°ãªã©ã§ã¯ãã®å¯¾å¿ãè¡ãã±ã¼ã¹ããããã
- ãã¡ã¤ã«I/Oãã¡ã¢ãªå¤§é£ããªã©ã®å¦çãè¡ãã¯ã©ã¹ã«ã¤ãã¦ã¯
é å»¶æ ¼ç´åããããã£
- 使ããã
- ãã¤ãã£ãã¢ããªã«ããã¦ã¯é 延è©ä¾¡ãããã¨ããã©ã¼ãã³ã¹ãæèããããã°ã©ãã³ã°ãã§ããã
ã»ã
- ããã¾ã§èªãã§
xxxx.dynamicType
ã®åå¨ãç¥ã£ããã»ã£ã¨ããã
- ããã¾ã§èªãã§