Edited at

My Swift Snipets

More than 5 years have passed since last update.

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()
}
}