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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
cockscomb
April 15, 2015
Programming
3.3k
4
Share
The newest super hissatsu-waza of iOS app development
Presented at potatotips #16
謝辞
必殺技の名前を考えるのに貢献してくれたyashiganiさんにこの場を借りてお礼申し上げます。
cockscomb
April 15, 2015
More Decks by cockscomb
See All by cockscomb
jq at the Shortcuts
cockscomb
1
2.1k
GraphQL放談
cockscomb
4
2.1k
GraphQL Highway
cockscomb
28
8.8k
吉田を支える技術
cockscomb
0
2.5k
コーポレートサイトを静的化してAmplify Consoleにデプロイする
cockscomb
0
3.5k
ユーザインターフェイスと非同期処理
cockscomb
5
2k
GUIアプリケーションの構造と設計
cockscomb
10
10k
イカリング2におけるシングルページアプリケーション
cockscomb
2
7.7k
あなたの知らない UIKit の世界 — UITableView に UITextView を置きたい
cockscomb
1
7.6k
Other Decks in Programming
See All in Programming
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
780
CSC307 Lecture 17
javiergs
PRO
0
310
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
430
JavaDoc 再入門
nagise
0
250
権限チェックの一貫性を型で守る TypeScript による多層防御
mnch
4
1.1k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
2
250
TSKaigi 2026 TypeScriptバックエンドのオブザーバビリティ戦略 — Datadog × NestJSの実践
taiseiyamamotoan
1
220
net-httpのHTTP/2対応について
naruse
0
420
3Dシーンの圧縮
fadis
1
580
RailsTokyo 2026#4: AI様があれば、 Hotwireの弱点は消えるか?
naofumi
5
1k
TypeScriptだけでAIエージェントを作る フロント・エージェント・インフラのフルスタック実践
har1101
6
1.3k
RTSPクライアントを自作してみた話
simotin13
0
420
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
190
Unsuck your backbone
ammeep
672
58k
Tell your own story through comics
letsgokoyo
1
940
Everyday Curiosity
cassininazir
0
220
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.6k
Leo the Paperboy
mayatellez
7
1.8k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
330
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
220
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ΞϓϦ։ൃɹɹٕ