Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
LINE占い iOS アプリ開発の現状 / LINE DM 15 about a LINE F...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
H.Takeshita
July 29, 2016
Technology
710
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LINE占い iOS アプリ開発の現状 / LINE DM 15 about a LINE Fortune development
This talk at LINE Developer Meetup in Fukuoka #15
H.Takeshita
July 29, 2016
Other Decks in Technology
See All in Technology
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
350
Claude Code本は、どのように執筆チームで書かれたか
oikon48
0
310
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
320
予測不能な実行エージェントを安全にサクッと試せるサンドボックス環境の話
sansantech
PRO
0
130
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
560
2026-10-01_MagicPod_QAハーネスエンジニアリングとQA組織の未来像
ynisqa1988
1
550
AI 時代の Azure エンジニアリング ~ 私たちは何を磨き、何を任せるのか ~
chack411
1
530
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
150
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
オンラインゲームのシステム全体像 - コロプラ 2026年度 新卒研修
colopl
0
900
OR学会2026年秋期大会_機械学習と数理最適化の融合による、配合レシピ最適化システム開発事例
brainpadpr
0
100
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
310
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
Fireside Chat
paigeccino
43
4.1k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
540
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
We Have a Design System, Now What?
morganepeng
55
8.4k
It's Worth the Effort
3n
188
29k
Believing is Seeing
oripsolob
1
240
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
760
Agile that works and the tools we love
rasmusluckow
331
22k
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ʹҠߦ͢Δͱ͖ίϯόʔτπʔϧ Λ͖͔͚ͬʹ͢ΔͱḿΔ