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
The newest super hissatsu-waza of iOS app devel...
Search
cockscomb
April 15, 2015
Programming
4
3.1k
The newest super hissatsu-waza of iOS app development
Presented at potatotips #16
謝辞
必殺技の名前を考えるのに貢献してくれたyashiganiさんにこの場を借りてお礼申し上げます。
cockscomb
April 15, 2015
Tweet
Share
More Decks by cockscomb
See All by cockscomb
jq at the Shortcuts
cockscomb
1
1.7k
GraphQL放談
cockscomb
4
1.9k
GraphQL Highway
cockscomb
28
8.3k
吉田を支える技術
cockscomb
0
2.2k
コーポレートサイトを静的化してAmplify Consoleにデプロイする
cockscomb
0
3.3k
ユーザインターフェイスと非同期処理
cockscomb
5
1.8k
GUIアプリケーションの構造と設計
cockscomb
10
10k
イカリング2におけるシングルページアプリケーション
cockscomb
2
7.4k
あなたの知らない UIKit の世界 — UITableView に UITextView を置きたい
cockscomb
1
7.4k
Other Decks in Programming
See All in Programming
AWSのLambdaで PHPを動かす選択肢
rinchoku
2
390
Simple組み合わせ村から大都会Railsにやってきた俺は / Coming to Rails from the Simple
moznion
3
2.2k
.NETでOBS Studio操作してみたけど…… / Operating OBS Studio by .NET
skasweb
0
120
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4.2k
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
250
混沌とした例外処理とエラー監視に秩序をもたらす
morihirok
13
2.3k
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
420
Fibonacci Function Gallery - Part 2
philipschwarz
PRO
0
210
QA環境で誰でも自由自在に現在時刻を操って検証できるようにした話
kalibora
1
140
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
550
歴史と現在から考えるスケーラブルなソフトウェア開発のプラクティス
i10416
0
300
為你自己學 Python
eddie
0
520
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
Building a Scalable Design System with Sketch
lauravandoore
460
33k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
19
2.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
192
16k
A Philosophy of Restraint
colly
203
16k
Designing for humans not robots
tammielis
250
25k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Navigating Team Friction
lara
183
15k
Practical Orchestrator
shlominoach
186
10k
Designing for Performance
lara
604
68k
A better future with KSS
kneath
238
17k
Transcript
ඞࡴ ࠷৽iOSΞϓϦ։ൃɹɹٕ
cockscomb
None
WATCH SPORT 42mm Space Gray Aluminum Case with Black
Sport Band
ඞࡴ ࠷৽iOSΞϓϦ։ൃɹɹٕ
ඞࡴ ΞϯϥοϓϋϦέʔϯ
let intLike = ["12.3", "45", "6-7-8"] let results = intLike.map
{ $0.toInt() } println(results) // => [nil, Optional(45), nil]
let intLike = ["12.3", "45", "6-7-8"] let results = intLike.map
{ $0.toInt() }.filter { $0 != nil }.map { $0! } println(results) // => [45]
let intLike = ["12.3", "45", "6-7-8"] let results = intLike.flatMap
{ $0.toInt().map { [ $0 ] } ?? [] } println(results) // => [45] New in Swift 1.2
ΞϯϥοϓϋϦέʔϯ
ඞࡴ ਅۭΦϖϨʔγϣϯΓ
class DragonOperation: NSOperation { let string: String var result: String?
init(_ string: String) { self.string = string } override var asynchronous: Bool { return true } ... override func start() { if cancelled { internalFinished = true return } internalExecuting = true let queue = dispatch_get_global_queue( QOS_CLASS_UTILITY, 0) dispatch_async(queue) { self.result = self.string.lowercaseString self.internalExecuting = false self.internalFinished = true } } }
private var internalExecuting: Bool = false { willSet { willChangeValueForKey("isExecuting")
} didSet { didChangeValueForKey("isExecuting") } } override var executing: Bool { return internalExecuting } private var internalFinished: Bool = false { willSet { willChangeValueForKey("isFinished") } didSet { didChangeValueForKey("isFinished") } } override var finished: Bool { return internalFinished }
let waza = DragonOperation("Z") waza.completionBlock = { if let result
= waza.result { println(result) // => "z" } } waza.start()
let oraora = ["X", "Y", "Z"].map { DragonOperation($0) } let
queue = NSOperationQueue() dispatch_async(dispatch_queue_create("Hissatsu", nil)) { queue.addOperations(oraora, waitUntilFinished: true) dispatch_sync(dispatch_get_main_queue()) { let results = oraora.flatMap { $0.result.map { [ $0 ] } ?? [] } println(results) // => ["x", "y", "z"] } }
ਅۭΦϖϨʔγϣϯΓ
ඞࡴ ΠχϡϝϨΠτόελʔ
let fonts = "/System/Library/Fonts" let files = NSFileManager().enumeratorAtPath(fonts)! while let
path: AnyObject = files.nextObject() { println(path) }
struct GeneratorOfNSEnumerator<T> : GeneratorType, SequenceType { private let enumerator: NSEnumerator
init(_ enumerator: NSEnumerator) { self.enumerator = enumerator } mutating func next() -> T? { return self.enumerator.nextObject() as! T? } func generate() -> GeneratorOfNSEnumerator<T> { return GeneratorOfNSEnumerator<T>(self.enumerator) } } let fonts = "/System/Library/Fonts" let files = NSFileManager().enumeratorAtPath(fonts)! for path in GeneratorOfNSEnumerator<String>(files) { println(path) }
let fonts = "/System/Library/Fonts" let files = NSFileManager().enumeratorAtPath(fonts)! for path
in files { println(path) } New in Swift 1.2
ΠχϡϝϨΠτόελʔ
ඞࡴ γϟυɾΞΫςΟϏςΟ
let title = "Apple" let URL = NSURL(string: "http://www.apple.com/")! UIActivityViewController(activityItems:
[title, URL], applicationActivities: nil)
class SharableTitle: NSObject, UIActivityItemSource { let title: String? init(title: String?)
{ self.title = title } func activityViewControllerPlaceholderItem( activityViewController: UIActivityViewController) -> AnyObject { return title ?? "" } func activityViewController( activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? { if activityType == UIActivityTypePostToTwitter || activityType == UIActivityTypePostToFacebook { return title } else { return nil } } func activityViewController( activityViewController: UIActivityViewController, subjectForActivityType activityType: String?) -> String { return title ?? "" } }
let title = "Apple" let URL = NSURL(string: "http://www.apple.com/")! UIActivityViewController(
activityItems: [SharableTitle(title: title), URL], applicationActivities: nil)
γϟυɾΞΫςΟϏςΟ
ඞࡴ ΦʔαϜϑΝϯΫγϣϯίʔϧ
class Awesome { func awesome(string: String) -> String { return
string.uppercaseString } } let a = Awesome() Awesome.awesome(a)("Awesome") // => "AWESOME"
class SuperAwesome: Awesome { override func awesome(string: String) -> String
{ return string.lowercaseString } } let s = SuperAwesome() Awesome.awesome(s)("Awesome") // => "awesome"
ΦʔαϜϑΝϯΫγϣϯίʔϧ
ඞࡴ ΞϯϥοϓϋϦέʔϯ ਅۭΦϖϨʔγϣϯΓ ΠχϡϝϨΠτόελʔ γϟυɾΞΫςΟϏςΟ ΦʔαϜϑΝϯΫγϣϯίʔϧ
ඞࡴ ࠷৽iOSΞϓϦ։ൃɹɹٕ