107 Views
June 27, 16
スライド概要
Swift 愛好会で『Swift チャチャチャ』について発表してきました。
※ Docswell での公開に移行する直前の Slideshare での閲覧数は 1,966 でした。
正統派趣味人プログラマー。プログラミングとは幼馴染です。
⽄ 4XJGUνϟνϟνϟ /* ΧδϡΞϧ 4XJGU ϓϩάϥϛϯά /* 2016.06.27 */ 集まれ Swift好き! Swift愛好会 vol 8 */ &;/&5۽୩༑ 4XJGU1SFWJFX IUUQF[OFUKQ
۽୩༑ 5PNPIJSP,VNBHBJ /** */ ⾣ 4XJGU͕ޠݴେ͖Ͱ͢ɻ ⾣ ΈΜͳͰָ͠Ήษڧձ͕େ͖Ͱ͢ɻ w J044XJGUͷษڧձΛ։࠵ͯ͠·͢ɻ w ҆৺ͯ͠ஊٛʹՖΛ࡙͔ͤΒΕ·͢Α͏ʹɻ ⾣ Ҏલʹॻ੶Λग़൛͖ͤͯ͞·ͨ͠ɻ ⾣ ٕज़ϒϩάΛॻ͍ͨΓͯ͠·͢ɻ
۽୩༑ !FT@LVNBHBJ &;/&5IUUQF[OFUKQ ษڧձ ԣJ1IPOF։ൃऀษڧձ ΧδϡΞϧ4XJGUษڧձ ZJEFW ˏԣɾഅंಓ DTXJGU !ԣɾ੨༿ Θ͍Θ͍ɾΏΔ͘ɺJ1IPOF։ൃऀͷ ΈΜͳͰָ͘͠ա͢͝ͷ͕తͷձ ΏΔ͘ΈΜͳͰ4XJGUʹ͍ͭͯ ޠΒ͑Δ͕ཉͯ࢝͘͠Ίͨձ ୈ̎̐ճΛʹ։࠵༧ఆ ୈ̍̌ճ݄ޙ͔ʁ
۽୩༑ !FT@LVNBHBJ &;/&5IUUQF[OFUKQ ॻ੶ొஃ 9DPEFపఈղઆ .04" 9DPEFͷશػೳΛ పఈతʹղઆͨ͠ຊ 049J04ܥͷྺ࢙ਂ͍ ༗ྉձһ੍ͷษڧձ 9DPEFͰཱͭͣ ๏ਓձһଟ 紙版は絶版、電⼦書籍は販売中
۽୩༑ !FT@LVNBHBJ &;/&5IUUQF[OFUKQ J04 049 "QQMF8BUDIΞϓϦ $PEF1JFDF ͍ͭͷి ιʔείʔυΛ5XJUUFSͱ (JTUʹಉ࣌ߘͰ͖Δɻ ࣜࢉܭ͑ݟΔిΞϓϦɻ XBUDI04ରԠ ԻͰ࠶ୡΰου &;/&5*11IPOF ؆୯ૢ࡞Ͱ ࠶ୡͷਃ͠ࠐΈɻ J1IPOFͰͻ͔ΓిΛ͏ɻ ࣗ-"/͔Βͷར༻ઐ༻
$PEF1JFDFGPS04 9 ษڧձΛָ͠ΉΞϓϦ ιʔείʔυΛ5XJUUFSͱ(JTUʹಉ࣌ߘͰ͖Δ ษڧձͰݟΛΈΜͳͱڞ༗͍ͨ࣌͠ͱ͔ʹศརʂ Ͱ͖Δ͜ͱ #love_swift
8 8 %$ /* 2016/06/13 2016/06/17 */
ͱ͜ΖͰΈͳ͞Μ
⽄ࢉνϟνϟνϟ ͝ଘͰ͔͢ʁ
ࢉνϟνϟνϟ ֓ཁ/* Wikipedia より引用 */ ࢉνϟνϟνϟʢ͞Μ͢͏νϟνϟνϟʣ /),ͷ൪ʰ͋ͳͨͷϝϩσΟʔʱͷೖબͰۂɺ ݄͔ΒʰΈΜͳͷ͏ͨʱͰ์ૹ͞Εͨɻ ࡞ࢺɾ࡞ۂΛ୲ͨ͠ͷࢁޱٛɻՎࢺͷશͯͰɺ ֶͷͷղ๏Λઆ໌ʢฏํࠜɺࡾ֯ൺɾࡾ֯ؔ ʣ͢Δɻ໊ࢉͰ͋Γͳ͕Βɺ༰తʹத ֶߍͱߴֶߍͰѻ͏༰ͱͳ͓ͬͯΓɺ໌Β͔ʹ ֶͰ͋Δɻখֶੜʹҙຯ͕Θ͔Βͳ͍ͱࢥΘΕ Δʹ͔͔ΘΒͣɺখֶੜʹ͘ਁಁͨ͠ɻ
ࢉνϟνϟνϟ ʹͳͬͯΔΈ͍ͨʁ
⽄ࢉνϟνϟνϟ ͜ΜͳՎ
TJOВ㲋DPTВ͕Γཱͭͱ͖ TJOВɺDPTВɺUBOВͷʁ
⽄ࢉνϟνϟνϟ
ࢉνϟνϟνϟ ղʜ ⽄ TJOВ͕DPTͷɹϧʔτͷ̏ഒ sin ✓ = p 3 cos ✓ この式が成り立つときの sinθ、cosθ、tanθの値を求める
ࢉνϟνϟνϟ ղʜ ⽄ ࢉνϟνϟνϟͰղ͖·͠ΐ͏ ͦΕɹ΄Β͏Ͱ͖ͨ sin ✓ = p 3 cos ✓ この式が成り立つときの sinθ、cosθ、tanθの値を求める
ࢉνϟνϟνϟ ղʜ ⽄ TJOΛׂΔ͜ͱDPTɹUBOͷ͜ͱ͞ まず、次の関係性がある sin tan θ cos sin ✓ = tan ✓ cos ✓ 問題の式を変形すると… p sin ✓ 3 = cos ✓ 1
ࢉνϟνϟνϟ ղʜ ⽄ ̎ล͕̍㲋̏ɹࣼล͕̎ͱͳΔͶ 問題の変形から比が判る sin x p tan 3 θ 1 cos p sin ✓ 3 = cos ✓ 1 三平方の定理を使って… p 2 2 2 x =1 + 3 p x= 1+3=2
ࢉνϟνϟνϟ ղʂ ⽄ TJO̎ͷϧʔτͷ̏ͰɺDPT 各辺の比から sin 2 p tan 3 θ 1 cos p 3 1 sin ✓ = , cos ✓ = 2 2 元の式と三角関数の関係から tan ✓ = p 3
ջ͔͍͠ͳ͊ʜ
ࢉνϟνϟνϟ ջ͔͠ΜͰ͍ͨΒʜ
⽄4XJGUνϟνϟνϟ ຊͯͬ࡞ͰؾΈͨɻ
̍ ΠϯελϯεϝιουͷॲཧΛ ॳճͼݺग़࣌͠ʹ͚࣮ͩߦ͢Δʹʁ ઌʹʹͳͬͯͯղ๏͕ڵຯਂ͔ͬͨͷͰՎʹͯ͠Έͨ
⽄4XJGUνϟνϟνϟ
4XJGUνϟνϟνϟ ղʜ ⽄ ΠϯελϯεͷϝιουΛ ͖̍Γͷ࣮ߦʹ // あるインスタンスメソッドの処理を初回だけ実行して viewController.prepare() // Do Something // それ以降は、呼び出しても何もしないようにしたい viewController.prepare() viewController.prepare() // Do Nothing // Do Nothing
4XJGUνϟνϟνϟ ղʜ ⽄ 4XJGUνϟνϟνϟͰղ͖·͠ΐ͏ ͦΕɹ΄Β͏Ͱ͖ͨ // あるインスタンスメソッドの処理を初回だけ実行して viewController.prepare() // Do Something // それ以降は、呼び出しても何もしないようにしたい viewController.prepare() viewController.prepare() // Do Nothing // Do Nothing
4XJGUνϟνϟνϟ ղʜ ⽄ ࣮ߦ͍ͨ͠#MPDL$MPTVSFͰ࣋ͨͤ final class ViewController : UIViewController { private(set) var prepare: Void = { print("Prepared") }() } // STEP1: この時点では初期化時点での実行になる let object = ViewController(nibName:nib, bundle:nil)
4XJGUνϟνϟνϟ ղʜ ⽄ ॳճͼݺग़࣌͠ɹධՁͳΒ ҙຯతʹMB[Z͞ final class ViewController : UIViewController { private(set) lazy var prepare: Void = { print("Prepared") }() } // STEP2: プロパティ参照で初回参照時のみの実行になる object.prepare as Void
4XJGUνϟνϟνϟ
ղʂ
⽄
ධՁͷ݁ՌΛɹؔͯ͠ʹܕ
ࣗવʹͼݺग़ͤΔ
final class ViewController : UIViewController {
private(set) lazy var prepare: () -> Void = {
print("Prepared")
return {}
}()
}
// STEP3: 初回だけ実行される関数として使える
object.prepare()
̎ 6*-BCFMΛ࿈݁Ͱ͖ΔΑ͏ʹͯ͠ ࿈݁͞ΕͨΒϥϕϧʹจࣈΛઃఆͤΑ
4XJGUνϟνϟνϟ ղʜ ⽄ ϥϕϧ͕࿈݁͞Εͨͱ͖ ʢνϟνϟʣςΩετΛઃఆ final class ViewController : UIViewController { // ここに Interface Builder でラベルを連結 private var noteLabel: UILabel }
4XJGUνϟνϟνϟ ղʜ ⽄ 4XJGUνϟνϟνϟͰղ͖·͠ΐ͏ ͦΕɹ΄Β͏Ͱ͖ͨ final class ViewController : UIViewController { // ここに Interface Builder でラベルを連結 private var noteLabel: UILabel }
4XJGUνϟνϟνϟ ղʜ ⽄ ࿈݁ͤ͞Δϥϕϧʹ ʢνϟνϟʣ0VUMFUଐੑ final class ViewController : UIViewController { // STEP1: @IBOutlet を付けると IB から連結可能 @IBOutlet private var noteLabel: UILabel }
4XJGUνϟνϟνϟ ղʜ ⽄ ॳظԽΕͯ͞ΕΔͷͰ *60ଐੑ final class ViewController : UIViewController { // STEP2: 使用時までに初期化を間にあわせる決意 @IBOutlet private var noteLabel: UILabel ! }
4XJGUνϟνϟνϟ ղʂ ⽄ ϥϕϧ͕࿈݁͞ΕͨΒ ͪʹɹςΩετઃఆ͞ final class ViewController : UIViewController { // STEP3: 変更を監視して速やかに設定(コードも明瞭) @IBOutlet private var noteLabel: UILabel ! { didSet { noteLabel.text = "\(arc4random())" } } }
⽄4XJGUνϟνϟνϟ ͓͠·͍
4XJGUνϟνϟνϟ
̍ͷղ
⾣ ΠϯελϯεϝιουͷॲཧΛ
ॳճͼݺग़࣌͠ʹ͚࣮ͩߦ͢Δʹʁ
final class ViewController : UIViewController {
private lazy var prepareAtFirstTime: () -> Void = {
print("Prepared")
return {}
}()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
prepareAtFirstTime()
}
}
4XJGUνϟνϟνϟ
̎ͷղ
⾣ 6*-BCFMΛ࿈݁Ͱ͖ΔΑ͏ʹͯ͠ɺ
࿈݁͞ΕͨΒϥϕϧʹจࣈΛઃఆͤΑ
final class ViewController : UIViewController {
@IBOutlet private var noteLabel: UILabel ! {
didSet {
noteLabel.text = "\(arc4random())"
}
}
}
4XJGUνϟνϟνϟ ࣮ࡍʹ࡞ͬͯΈͨײ ⾣ ࢥͬͨҎ্ʹָ͔ͬͨ͠ɻ ⾣ ཁॴΛతʹ·ͱΊΔඞཁ͕͋Δ͕ɺ ⾣ ΘΓʹཁ͕ࡍཱͭҹɻ
⽄4XJGUνϟνϟνϟ Έͳ͞Μͥͻ࡞ͬͯΈ͍ͯͩ͘͞ʂ
Enjoy! Swift /* Thank you */