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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
2k
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
The Less-Told Story of Socket Timeouts
coe401_
3
700
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
300
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
190
AIと共に生きる技術選定 2026
sgash708
0
110
属人化しないコード品質の作り方_2026.04.07.pdf
muraaano
0
260
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
230
Agentic Elixir
whatyouhide
0
420
〜バイブコーディングを超えて〜 チームで実験し続けたAI駆動開発
tigertora7571
0
170
Spec-driven Development: How AI Changes Everything (And Nothing)
simas
PRO
0
390
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
4
370
「Linuxサーバー構築標準教科書」を読んでみた #ツナギメオフライン.7
akase244
0
1.4k
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
500
Featured
See All Featured
Design in an AI World
tapps
1
200
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
270
First, design no harm
axbom
PRO
2
1.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
310
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
810
Abbi's Birthday
coloredviolet
2
7.3k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
The Invisible Side of Design
smashingmag
303
52k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
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ΞϓϦ։ൃɹɹٕ