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
590
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
機械学習を「社会実装」するということ 2025年版 / Social Implementation of Machine Learning 2025 Version
moepy_stats
6
1.5k
今から、 今だからこそ始める Terraform で Azure 管理 / Managing Azure with Terraform: The Perfect Time to Start
nnstt1
0
240
AIアプリケーション開発でAzure AI Searchを使いこなすためには
isidaitc
1
120
JAWS-UG20250116_iOSアプリエンジニアがAWSreInventに行ってきた(真面目編)
totokit4
0
140
[IBM TechXchange Dojo]Watson Discoveryとwatsonx.aiでRAGを実現!座学①
siyuanzh09
0
110
月間60万ユーザーを抱える 個人開発サービス「Walica」の 技術スタック変遷
miyachin
1
150
re:Invent2024 KeynoteのAmazon Q Developer考察
yusukeshimizu
1
150
Godot Engineについて調べてみた
unsoluble_sugar
0
430
AWS re:Invent 2024 re:Cap Taipei (for Developer): New Launches that facilitate Developer Workflow and Continuous Innovation
dwchiang
0
170
商品レコメンドでのexplicit negative feedbackの活用
alpicola
2
370
2025年の挑戦 コーポレートエンジニアの技術広報/techpr5
nishiuma
0
150
Bring Your Own Container: When Containers Turn the Key to EDR Bypass/byoc-avtokyo2024
tkmru
0
860
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.6k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Docker and Python
trallard
43
3.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
3
180
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Making Projects Easy
brettharned
116
6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
30
2.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Done Done
chrislema
182
16k
Mobile First: as difficult as doing things right
swwweet
222
9k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
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ʹҠߦ͢Δͱ͖ίϯόʔτπʔϧ Λ͖͔͚ͬʹ͢ΔͱḿΔ