Swiftのクロージャが説明からして難しすぎる件について
The Swift Programming Language
や他の解説サイトでクロージャの説明を読んでみたのだが、文法からしてわからん。
試行錯誤しつつ実際に使って見ると、引数付きの場合のstrnums -> [Int] in
がちょっと特殊だった。
てか例文をなんでもっと簡潔に書いてくれないんだろう。
func test() { // これがクロージャ let moge: ([String]) -> ([Int]) = { strnums -> [Int] in var nums: [Int] = [] for str: String in strnums { nums.append(Int(str)!) } return nums } // クロージャを使ってみる let bar = moge(["5", "4", "3"]) // 結果を確認 for number: Int in bar { print("\(number)") // => 5, 4, 3 } }
むしろ関数がクロージャの1種って言われてもなあ。
Swift
の他の機能もそうだけど、iOSアプリを作る中でむしろそれをどう使うのかがいまいちわからん。
ちょっとメモ。
public class LocalStorageManager { private static final int mPrivateMode = Context.MODE_PRIVATE; private static final int mPublicMode = Context.MODE_WORLD_WRITEABLE | Context.MODE_WORLD_READABLE; private static final String prefix = "app_"; /** * /data/data/パッケージ名を取得する * @param context * @return * @throws FileNotFoundException */ public static final File getPackageNameDirectory (Context context) throws FileNotFoundException { String temporary = "hoge"; StringBuilder builder = new StringBuilder(); builder.append(prefix).append(temporary); File root = new File(context.getDir(temporary, mPrivateMode).getAbsolutePath().replace(builder.toString(), "")); if (!root.exists()) { throw new FileNotFoundException(); } return root; } /** * /data/data/パッケージ名/直下にpathフォルダがあるかどうか * @param context * @param path app_"path"ディレクトリ名 * @return */ public static final File findLocalDirectory (Context context, final String path) { try { File find = new File(getPackageNameDirectory(context), path); if (find.exists()) { return find; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }