Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

swift

swift標準ライブラリ調査その1 ジェネリクス

swiftの標準ライブラリはすんなり理解できないところが多いため、一つづつ調べていきたい。 struct Array<T> : MutableCollectionType, Sliceable, _DestructorSafeContainer { } extension Array : _ArrayType { init<S : SequenceType where T == T>(_ s: S) } このイニシャライザのwhere T =</s></t>…

SwiftでAtomic操作(iOSでは非推奨)

Swiftで変数にatomicにアクセスしたい場合、幾つか方法があるが、OSSpinLockを使う方法をここでは紹介する。 他の方法との時間の比較も時間があればやりたい。 まずは、排他処理なしの場合に動作がダメなことを確認する import Foundation let sz = 1000 var…

UnsafeMutableAudioBufferListPointer

iOS8.3(2015年7月)リリースタイミングで追加されたらしい。 やっとswiftでまともにAudioBufferListが扱えるようになった。 UnsafeMutableAudioBufferListPointer developer.apple.com stackoverflow.com

swiftとObjective-Cのメソッド呼び出し時間

swiftとobjective-Cのメソッド呼び出し時間はどのくらい違うのか、試してみた。 空っぽのメソッドを1回呼び出すのにかかる時間 デバッグビルド(OSX10.10、Xcode7GM) objc 0.119μsec swift 0.043μsec リリースビルド(OSX10.10、Xcode7GM) objc 0.007μsec swif…

swiftでIntをBoolに変換するときの注意

swiftでIntをBoolに変換するときの注意 これはコンパイルOK let a:Int = 1 let b:Bool = (a != 0) これはコンパイルエラー aの後ろにスペースを空けないと、a!だとみなされてしまう。 let a:Int = 1 let b:Bool = (a!=0) // Operand of postfix '!' should h…

swiftのクラスのポインタをC言語に渡してコールバック後にクラスに戻す(swift3)

[2017-02-12 update] swift3からunsafeBitCastではなくUnmanagedを使う方法が推奨となっていますのでそちらをお使いください。 unsafeBitCastを使ってswiftのクラスをポインタとして扱い、コールバック後のクラスに戻して動作するかやってみた。 結論から言…

swift2でC言語の関数ポインタが利用できるようになった(swift2)

swift2でC言語の関数ポインタが利用できるようになった。 例えば、以下のように書けるようになった。 cfile.h typedef int (*OPERATION)(int, int); int execute(OPERATION operation, int a, int b); cfile.c #include "cfile.h" int execute(OPERATION ope…

swiftでの変数のサイズ取得

C言語 int32_t a; sizeof(a); sizeof(int32_t); swift var a:Int32 sizeof(Int32) sizeofValue(a)

taglist.vimをswift対応する

taglist.vimをswift対応してみました。 こちらを参考にしました。 ctags を Swift に対応させる - Qiitaqiita.com 必要な手順は2つ 1) ~/.ctagsに以下を追加する。 --langdef=Swift --langmap=Swift:+.swift --regex-swift=/(var|let)[ \t]+([^:=]+).*$/\2/…

swift文字列走査

swiftで文字列の走査をする方法。 swiftは型に厳しいので、stringのsubscriptに指定する型はString.Indexである必要がある。 もっとも単純にやる場合、次のようになる。 var str = "Hello" var i:String.Index = str.startIndex // 0 var end:String.Index =…

swiftで使えるAtomic系API (OSX/iOS)

swiftで使えるAtomic系APIがあったので備忘録としてリストアップしておく。 OSX/iOSで確認した。 func OSAtomicAdd32(__theAmount: Int32, __theValue: UnsafeMutablePointer<Int32>) -> Int32 func OSAtomicAdd32Barrier(__theAmount: Int32, __theValue: UnsafeMu</int32>…

swiftで構造体またはクラスをArrayにする際に気をつけること(2)

class CPoint :Printable { var x:Int = 0 var y:Int = 0 init() {} var description:String { return "x[\(x)] y[\(y)]" } } struct SPoint :Printable { var x:Int = 0 var y:Int = 0 var description:String { return "x[\(x)] y[\(y)]" } } var v2:[SPoi…

swiftで構造体またはクラスをArrayにする際に気をつけること(1)

swiftでは構造体は値渡し、クラスは参照渡しと言われますが、実際に使ってみて失敗した方が理解が早いです。 以下のサンプルと実行結果を見てみます。 class CPoint :Printable { var x:Int = 0 var y:Int = 0 init() {} var description:String { return "x…

Swiftでビット演算判定

C言語でのビット演算後の判定処理と同じことをSwiftで書く場合、少し工夫がいるので、メモ。 int value1 = (1<<0); int value2 = (1<<0|1<<1); if( value1 & value2 ){ printf( "good!" ); } swiftではifの中身はBoolしか受け付けないのでこう書かなくてはい…

swift3で小数点値フォーマット

C言語での小数点値フォーマット指定をswiftで実現する方法を調べました。 C言語では小数点以下の幅を指定した場合、一つ下の桁が四捨五入されます。 C printf( "%.2f\n", 12.3456 ); // 12.35 printf( "%.2f\n", 12.0 ); // 12.00 swift let num = NSNumber(…

SwiftのEnumでクロージャを使う

スタンフォード大学 Paul Hegarty先生のDeveloping iOS 8 Apps with SwiftでSwiftを勉強していますが、難解なところがあったので、自分でソースを書いてみました。 import Cocoa class MyObject { enum Op { case Function2((Double, Double) -> Double) cas…