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.2k
吉田を支える技術
cockscomb
0
2.1k
コーポレートサイトを静的化して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.3k
Other Decks in Programming
See All in Programming
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
役立つログに取り組もう
irof
28
9.6k
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
3
690
ヤプリ新卒SREの オンボーディング
masaki12
0
130
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
610
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.2k
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
100
Micro Frontends Unmasked Opportunities, Challenges, Alternatives
manfredsteyer
PRO
0
110
距離関数を極める! / SESSIONS 2024
gam0022
0
290
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
520
Click-free releases & the making of a CLI app
oheyadam
2
120
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Navigating Team Friction
lara
183
14k
Statistics for Hackers
jakevdp
796
220k
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ΞϓϦ։ൃɹɹٕ