$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
LINE占い iOS アプリ開発の現状 / LINE DM 15 about a LINE F...
Search
H.Takeshita
July 29, 2016
Technology
1
660
LINE占い iOS アプリ開発の現状 / LINE DM 15 about a LINE Fortune development
This talk at LINE Developer Meetup in Fukuoka #15
H.Takeshita
July 29, 2016
Tweet
Share
Other Decks in Technology
See All in Technology
pmconf2025 - データを活用し「価値」へ繋げる
glorypulse
0
620
Kiro Autonomous AgentとKiro Powers の紹介 / kiro-autonomous-agent-and-powers
tomoki10
0
150
AIにおける自由の追求
shujisado
3
480
Design System Documentation Tooling 2025
takanorip
2
980
Overture Maps Foundationの3年を振り返る
moritoru
0
110
[JAWS-UG 横浜支部 #91]DevOps Agent vs CloudWatch Investigations -比較と実践-
sh_fk2
1
210
エンジニアリングマネージャー はじめての目標設定と評価
halkt
0
210
あなたの知らないDateのひみつ / The Secret of "Date" You Haven't known #tqrk16
expajp
0
120
“決まらない”NSM設計への処方箋 〜ビットキーにおける現実的な指標デザイン事例〜 / A Prescription for "Stuck" NSM Design: Bitkey’s Practical Case Study
bitkey
PRO
1
490
グレートファイアウォールを自宅に建てよう
ctes091x
0
130
Ruby で作る大規模イベントネットワーク構築・運用支援システム TTDB
taketo1113
1
110
シンプルを極める。アンチパターンなDB設計の本質
facilo_inc
2
1.6k
Featured
See All Featured
Side Projects
sachag
455
43k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Scaling GitHub
holman
464
140k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Writing Fast Ruby
sferik
630
62k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
The Language of Interfaces
destraynor
162
25k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Agile that works and the tools we love
rasmusluckow
331
21k
How STYLIGHT went responsive
nonsquared
100
5.9k
Done Done
chrislema
186
16k
Transcript
-*/&͍J04ΞϓϦ ։ൃͷݱঢ় -*/&'VLVPLB!UBLFUJO -*/&%FWFMPQFS.FFUVQJO'VLVPLB
ࣗݾհ w !UBLFUJO w ੜ·Ε w ݩ؟ڸ w J04։ൃྺ
ΞδΣϯμ w -*/&͍ʹ͍ͭͯ w αʔϏε։ൃϑϩʔ w ࠷ۙͷ։ൃํ w ࣾศརXFCαʔϏε
-*/&͍ʹ͍ͭͯ
-*/&͍ w -*/& αʔϏεͱͯ͠ϦϦʔε w ୯ಠΞϓϦ ͱͯ͠ϦϦʔε
-*/&͍ • ܳೳքͰͷεϐϦνϡ Ξϧঁࢠେੜ$)*&ɺήο λʔζ൧ాͳͲͷ͍ࢣʹ ΑΔʮຊ͍֨ʯ • 100໊Ҏ্ͷਓؾ͍ࢣͷ த͔ΒࣗͷΈʹ߹ͬ ͨ۩ମతͳΞυόΠεͱ
ؑఆΛड͚Δ͜ͱ͕Ͱ͖ ΔʮΈ૬ஊॴʯ
-*/&͍ w ରԠ04J04Ҏ্
None
݄ ݄ ݄ ݄ ݄ ϦϦʔε 7FSTJPO -*/&͍ ։ൃԬҠ J04DVU
7FSTJPO ݄ -*/&'VLVPLB ։ൃ্ཱࣨͪ͛
αʔϏε։ൃϑϩʔ
اը σβΠφ ΤϯδχΞ 2" 5& 5&
اը σβΠφ ΤϯδχΞ 2" 5& 5& ౦ژ Ԭ
اը σβΠφ ΤϯδχΞ 2" 5& 5&
اը σβΠφ ΤϯδχΞ 2" 5& 5& ΞΠσΞͩΑ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ;Ή;ΉɺͰ͖ͦ͏ ΞΠσΞͩΑ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ͬͱ͜͏͢ΕΑ͘Ͷʁ ΞΠσΞͩΑ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ͬͱ͜͏͢ΕΑ͘Ͷʁ ͋ʔɺͳΔ΄ͲɻΠΠωɻ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ͜͏͍͏ࣄ͠Α͏ͱࢥͬͯΔ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ͜͏͍͏ࣄ͠Α͏ͱࢥͬͯΔ ϞοΫ࡞Γ·͢Ͷ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ϞοΫ࡞ͬͨΑɻ ͜Μͳಈ͖ͯ͠Ͷɻ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ͪΐɺݫ͘͠Ͷʁ ϞοΫ࡞ͬͨΑɻ ͜Μͳಈ͖ͯ͠Ͷɻ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ͜Μͳײ͡ͰͲ͏ʁ ϞοΫ࡞ͬͨΑɻ ͜Μͳಈ͖ͯ͠Ͷɻ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ͜Μͳײ͡ͰͲ͏ʁ Φοέʔɺ͡ΌΨΠυ࡞ΔͶ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ΨΠυ࡞ͬͨΑ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ΨΠυ࡞ͬͨΑ
اը σβΠφ ΤϯδχΞ 2" 5& 5& Αͬ͠Όɺ։ൃ͢ΔͰ ΨΠυ࡞ͬͨΑ
اը σβΠφ ΤϯδχΞ 2" 5& 5& Αͬ͠Όɺ։ൃ͢ΔͰ ΨΠυ࡞ͬͨΑ Μ͡Όςετέʔε࡞͓ͬͯ ͖·͢
اը σβΠφ ΤϯδχΞ 2" 5& 5& ։ൃதʜ
اը σβΠφ ΤϯδχΞ 2" 5& 5& Ͱ͖ͨ
اը σβΠφ ΤϯδχΞ 2" 5& 5& Ͱ͖ͨ σβΠϯ2"͠·͢Ͷ 2"։࢝͠·͢Ͷ
اը σβΠφ ΤϯδχΞ 2" 5& 5& Ͱ͖ͨ σβΠϯ2"͠·͢Ͷ 2"։࢝͠·͢Ͷ
اը σβΠφ ΤϯδχΞ 2" 5& 5& 2"தʜ
اը σβΠφ ΤϯδχΞ 2" 5& 5& ΦοέʔͰ͢ ΦοέʔͰ͢
اը σβΠφ ΤϯδχΞ 2" 5& 5& όΠφϦVQMPBEͨ͠Αʂ
اը σβΠφ ΤϯδχΞ 2" 5& 5& όΠφϦVQMPBEͨ͠Αʂ ͓͔ͭΕ͞ΜͰͨ͠ʔ
اը σβΠφ ΤϯδχΞ 2" 5& 5& "QQMFʹਃʂ
࠷ۙͷ։ൃํ
0CKFDUJWF$ͷίʔυྔͱϑΝΠϧ pOEOBNF NcXDM pOEOBNF NcYBSHTXDM
0CKFDUJWF$ͷίʔυྔͱϑΝΠϧ 4XJGUͷίʔυྔͱϑΝΠϧ pOEOBNF NcXDM pOEOBNF NcYBSHTXDM pOEOBNF TXJGUcXDM
pOEOBNF TXJGUcYBSHTXDM 12282
৽نίʔυવ4XJGUͰॻ͘
৽نίʔυવ4XJGUͰॻ͘ ͍ͭͰʹॻ͖͑Εͦ͏ͳ0CKFDUJWF $ϑΝΠϧ4XJGUͰϦϥΠτ͢Δʂ
৽نίʔυવ4XJGUͰॻ͘ ͍ͭͰʹॻ͖͑Εͦ͏ͳ0CKFDUJWF $ϑΝΠϧ4XJGUͰϦϥΠτ͢Δʂ ɻɻɻ
৽نίʔυવ4XJGUͰॻ͘ ͍ͭͰʹॻ͖͑Εͦ͏ͳ0CKFDUJWF $ϑΝΠϧ4XJGUͰϦϥΠτ͢Δʂ ʊਓਓਓਓਓʊ ʼɹͩΔ͍ɹʻ ʉ:?:?:?:ʉ
ίϯόʔτπʔϧ͓͏
(FOFSBUFE*OUFSGBDF
(FOFSBUFE*OUFSGBDF 9DPEFʙ
(FOFSBUFE*OUFSGBDF @interface ExampleModel : NSObject @property (nonatomic) NSNumber *amount; @property
(nonatomic, copy) NSString *datetime; @property (nonatomic, copy) NSString *title; @end public class ExampleModel : NSObject { public var amount: NSNumber! public var datetime: String! public var title: String! }
IUUQPCKDTXJGUZBIPPMBCTKQ PCKDTXJGU 8FC4FSWJDF
PCKDTXJGU 044
9$4XJGUS 9DPEF1MVHJO
9$4XJGUS 9DPEF1MVHJO
ॻ͖͑Δ·Ͱ࣌ؒऔΕͳ͍
ॻ͖͑Δ·Ͱ࣌ؒऔΕͳ͍ ʊਓਓਓਓਓਓਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹͤΊͯ0CKFDUJWF$Λڧ͘͠Α͏ɹʻ ʉ:?:?:?:?:?:?:?:?:?:?:?:?:?:ʉ
/VMMBCJMJUZ 9DPEFd -JHIU8FJHIU(FOFSJDT 9DPEFd
/VMMBCJMJUZ @property (nonnull, copy, nonatomic) NSString *name; @property (copy, nonatomic)
NSString * __nonnull name; @property (copy, nonatomic) NSString * _Nonnull name; @property (nullable, copy, nonatomic) NSString *name; @property (copy, nonatomic) NSString * __nullable name; @property (copy, nonatomic) NSString * _Nullable name; - (void)example:(nonnull NSArray<NSString *> *)param; - (void)example:(NSArray<NSString *> * _Nonnull)param;
/VMMBCJMJUZ // Objective-C + (NSString *)message; // ࣮ nil Λฦ͢ࣄ͕͋Δ
// Swift Ͱ func message() -> NSString! Example.message().characters // nil ฦͬͨ࣌ʹ Crash >< // Objective-C + (nullable NSString *)message; // nil ฦ͢ՄೳੑΛ໌ࣔ // Swift Ͱ func message() -> NSString? Example.message()?.characters // Optional Ͱ nil safe
/VMMBCJMJUZ ࠪൣғʢ"VEJUFE3FHJPOTʣ NS_ASSUME_NONNULL_BEGIN @interface ExampleModel : NSObject @property (copy, nonatomic)
NSString *name; @property (copy, nonatomic) NSString *country; @property (nullable, copy, nonatomic) NSString *hobby; @end NS_ASSUME_NONNULL_END
-JHIU8FJHIU(FOFSJDT + (NSArray <NSString *>*)someArray { NSArray<NSString *> *var =
@[@"test"]; return var; }
-JHIU8FJHIU(FOFSJDT // Objective-C + (NSArray *)someArray { NSArray *var =
@[@"test"]; return var; } // Swift Example.someArray()[0].characters
-JHIU8FJHIU(FOFSJDT // Objective-C + (NSArray <NSString *> *)someArray { NSArray<NSString
*> *var = @[@"test"]; return var; } // Swift Example.someArray()[0].characters
-JHIU8FJHIU(FOFSJDT // Objective-C + (NSArray <NSString *> *)someArray { UIImage
*image = [UIImage imageNamed:@"example.png"]; NSArray<UIImage *> *var = @[image]; return var; }
-JHIU8FJHIU(FOFSJDT // Objective-C + (NSArray <NSString *> *)someArray { UIImage
*image = [UIImage imageNamed:@"example.png"]; NSArray<UIImage *> *var = @[image]; return var; } // Swift Example.someArray()[0].characters
-JHIU8FJHIU(FOFSJDT NSMutableArray<UIView *> *array = [@[] mutableCopy]; // MyView
UIView ͷαϒΫϥε [array addObject:[MyView new]]; MyView *myView = array[0];
-JHIU8FJHIU(FOFSJDT NSMutableArray<__kindof UIView *> *array = [@[] mutableCopy]; // MyView
UIView ͷαϒΫϥε [array addObject:[MyView new]]; MyView *myView = array[0];
-JHIU8FJHIU(FOFSJDT Մಡੑ্ Swift ͱͷ૬ޓӡ༻ੑ্
ϨΠΞτ _textLabel.frame = (CGRect){ .origin.x = 0., .origin.y = CGRectGetMaxX(self.itemImageView.frame)
+ 3., .size.width = CGRectGetWidth(self.itemImageView.frame), .size.height = _textLabel.font.lineHeight * 2. + 7. };
ϨΠΞτ વ"VUP-BZPVU͏͔ΒYJCԽ͍ͯ͜͠͏ _textLabel.frame = (CGRect){ .origin.x = 0., .origin.y =
CGRectGetMaxX(self.itemImageView.frame) + 3., .size.width = CGRectGetWidth(self.itemImageView.frame), .size.height = _textLabel.font.lineHeight * 2. + 7. };
ϨΠΞτ @IBInspectable var borderColor: UIColor = UIColor.clearColor() { didSet {
layer.borderColor = borderColor.CGColor } } @IBInspectable var cornerRadius: CGFloat = 0 { didSet { layer.cornerRadius = cornerRadius } } *#*OTQFDUBCMF
ϨΠΞτ @IBInspectable var borderColor: UIColor = UIColor.clearColor() { didSet {
layer.borderColor = borderColor.CGColor } } @IBInspectable var cornerRadius: CGFloat = 0 { didSet { layer.cornerRadius = cornerRadius } } *#*OTQFDUBCMF
ϨΠΞτ 6*7JFX$POUSPMMFS4UPSZ#PBSEԽ
ϨΠΞτ 6*7JFX$POUSPMMFS4UPSZ#PBSEԽ import UIKit protocol StoryBoardable extension StoryBoardable where Self:
UIViewController { static func viewControllerFromStoryboard() -> Self { let storyboard = UIStoryboard(name: className, bundle: nil) return storyboard.instantiateViewControllerWithIdentifier( className ) as! Self } }
ϨΠΞτ 6*7JFX$POUSPMMFS4UPSZ#PBSEԽ // for Objective-C extension UIViewController { @available(*, unavailable)
@objc static func viewControllerFromStoryboard() -> UIViewController { let storyboard = UIStoryboard(name: className, bundle: nil) return storyboard. instantiateViewControllerWithIdentifier(className) } }
ϨΠΞτ 6*7JFX$POUSPMMFS4UPSZ#PBSEԽ // from Swift let vc = viewControllerFromStoryboard() //
from Objective-C MyViewController *viewController = (MyViewController *)[MyViewController viewControllerFromStoryboard];
ࣾศརXFCαʔϏε
O%FQMPZ
O%FQMPZ
"QQ%FQMPZ
/1VTI "1/4 ($. ֤αʔϏεαʔό /1VTIαʔό
/&-0
"QQ3FWJFXT
$IBU014 IVCPU
·ͱΊ 4XJGUͰॻ͚ͳ͍࣌0CKFDUJWF$ͷ৽͍͠ػೳͬͯ ૬ޓӡ༻ੑ্͍͛ͯ͜͏ "VUP-BZPVU͍Ͱ׳ΕΑ͏ -*/&ࣾศརπʔϧ͕ϞϦϞϦ͋Γ·͢ɻҰॹʹಇ͜͏ʂ 0CKFDUJWF$Λ4XJGUʹҠߦ͢Δͱ͖ίϯόʔτπʔϧ Λ͖͔͚ͬʹ͢ΔͱḿΔ