CFArrayはArrayと等価じゃなかった
XCode Version 7.1.1 (7B1005) Swift2.1で試しました。
CGWindowListCreateDescriptionFromArrayに[Int]を渡したところコンパイルが通ったのでCFArrayとArrayが等価だと思ってていたが使い方が間違っていたようなのでメモ
let windowArray = [1310] let windowsdescription:CFArrayRef = CGWindowListCreateDescriptionFromArray(windowArray)!; let windowInfos = windowsdescription as NSArray? as? [[String: AnyObject]] print(windowInfos?.description)
1310のWindowがあるときに上のようなコードだと、windowInfosが空っぽになってしまう。
let windowIds = [1310] let windowArray = CFArrayCreate ( nil, UnsafeMutablePointer<UnsafePointer<Void>>(windowIds), windowIds.count,nil) let windowsdescription = CGWindowListCreateDescriptionFromArray(windowArray)!; let windowInfos = windowsdescription as NSArray? as? [[String: AnyObject]] print(windowInfos?.description)
のようにCFArrayを作ってから関数を呼ぶようにすると無事適切な値が帰ってくるようになった。 それっぽくコンパイルが通っても意図通りになっていないケースがあるのでObjectiveCの関数を呼ぶ時は注意が必要そうだ。