Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
650
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
AI時代こそ求められる設計力- AWSクラウドデザインパターン3選で信頼性と拡張性を高める-
kenichirokimura
3
350
[Codex Meetup Japan #1] Codex-Powered Mobile Apps Development
korodroid
2
990
「れきちず」のこれまでとこれから - 誰にでもわかりやすい歴史地図を目指して / FOSS4G 2025 Japan
hjmkth
1
320
LLMアプリの地上戦開発計画と運用実践 / 2025.10.15 GPU UNITE 2025
smiyawaki0820
1
640
衛星画像超解像化によって実現する2D, 3D空間情報の即時生成と“AI as a Service”/ Real-time generation spatial data enabled_by satellite image super-resolution
lehupa
0
190
難しいセキュリティ用語をわかりやすくしてみた
yuta3110
0
300
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
14k
それでも私が品質保証プロセスを作り続ける理由 #テストラジオ / Why I still continue to create QA process
pineapplecandy
0
130
AWS Control Tower に学ぶ! IAM Identity Center 権限設計の第一歩 / IAM Identity Center with Control Tower
y___u
1
200
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.2k
Liquid AI Hackathon Tokyo プレゼン資料
aratako
0
110
AIツールでどこまでデザインを忠実に実装できるのか
oikon48
6
3.5k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.8k
4 Signs Your Business is Dying
shpigford
185
22k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
600
KATA
mclloyd
PRO
32
15k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
Making Projects Easy
brettharned
120
6.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Automating Front-end Workflow
addyosmani
1371
200k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
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ʹҠߦ͢Δͱ͖ίϯόʔτπʔϧ Λ͖͔͚ͬʹ͢ΔͱḿΔ