SwiftでMacアプリをつくっていて、
ちょっとハマった所。スニペットにしてまとめました。
随時更新予定。
GCD
gcd_sample.swift
// dispatch_get_main_queueは廃止
// 5秒後に
let offset = 5.0
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(offset * Double(NSEC_PER_SEC))),dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),{
// TODO dispatch
})
// Background Task
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, {
// Background
})
デリゲート定義
とてもいいまとめ↓
http://fuckingclosuresyntax.com/
delegate_sample.swift
class TheDelegteSample {
// 定義
typealias JsonDelegate = (json:NSDictionary) -> ()
// 変数
var jsonDelegate:JsonDelegate?
// 叩く
func foo() {
if jsonDelegate {
jsonDelegate(json:theJson)
}
}
}
Obj-C側でswift用のデリゲートを定義するのはこちら。
delegate_sample.h
typedef void (^JsonDelegate)(NSDictionary json);
シングルトン
file_sample.swift
class TheSingleton: NSObject {
// スタティックgetter変数はclass var
// structじゃないとスタティックプロパティは持てない
class var instance : TheSingleton {
struct Singleton {
static let _instance = TheSingleton()
}
return Singleton._instance
}
}
日にち
date_sample.swift
let date = NSDate()
let dateFormatter = NSDateFormatter()
dateFormatter.setDateFormat("yyyy-MM-dd-HH-mm-ss")
let dateStr = dateFormatter.stringFromDate(date)
ファイル
file_sample.swift
// デスクトップから取得。構造体になってるので注意
let directory = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DesktopDirectory, NSSearchPathDomainMask.UserDomainMask, true)
let directoryStr = directory[0] as NSString
let path = NSString(format: "%@/%@.txt", directoryStr, "thefile")
let url = NSURL(fileURLWithPath:path)
音再生(Mac)
SoundManager.swift
import Cocoa
class SoundManager {
struct Cache {
static let sound = Dictionary<String, NSSound>()
}
init() {
}
class func getSound(name:String) -> NSSound {
var sound = Cache.sound[name]
if sound == nil {
let soundpath = NSBundle.mainBundle().pathForResource(name, ofType:"aif")
sound = NSSound(contentsOfFile: soundpath, byReference: false)
}
return sound!
}
class func play(name:String) {
let sound = SoundManager.getSound(name)
sound.play()
}
}