WWDC 2014でのスライド'Advanced Swift'に不動点コンビネータを使った見事な方法が載っていたので問題を簡潔にしてメモしておきます.情報をくれた@Ushio@githubさんに感謝. letだけでは無理 letを(letrecのように)使って let fib = {(n: Int) -> Int in return n < 2 ? n : fib(n - 1) + fib(n - 2) }
![Swiftのクロージャで再帰 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/6ef0b8113a5a3ab627007ede02d8d73e3a530e76/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9U3dpZnQlRTMlODElQUUlRTMlODIlQUYlRTMlODMlQUQlRTMlODMlQkMlRTMlODIlQjglRTMlODMlQTMlRTMlODElQTclRTUlODYlOEQlRTUlQjglQjAmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtY2xpcD1lbGxpcHNpcyZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWIxZDRiMTM2MDBiMTA2ZTRkOTRiZGUwN2JiYWJkZDg2%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwc2F0b3NoaWEmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTI5ZTdmNzhkYTVhYmM0M2M3NDJmNGQ0YWY1MDM2ZWMw%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D1a5c411455f2263b992e6d24f40a3d5c)
バイナリファイルから整数値を取り出すようなことがある場合,バイト配列を整数に変換する関数を用意しておくと便利です.このときの関数はgetInt32()やgetUInt64()などと整数のタイプごとに別個に実装するかと思います.実装の中身はほとんど同じであるにも関わらずです. そこで,綺麗に実装を一つにまとめられないものだろうかと思い,ジェネリクスを使って試してみました.個人的にはなかなか面白い作業だったと思うので,ここにログしておきます. 今回,仕立てた関数getIntegerはこのように使います. let getInt16 = getInteger(type: Int16.self) let getUInt32 = getInteger(type: UInt32.self) var v = getInt16(bytes: someByteArray) var w = getUInt32(
Swiftでは,Cの構造体でさえもExtensionでどんどん拡張できてしまうのは愉快痛快ですね. C言語でのソケット関連のお約束をSwiftで拡張して使いやすくしてみようという試みです. Cの,というかソケットAPIでは, struct sockaddr_in sin; memset(&sin, 0, sizeof(sin)); sin.sin_len = sizeof(sin); sin.sin_family = AF_INET; sin.sin_port = htons(0); sin.sin_addr.s_addr= INADDR_ANY; bind(sock, (struct sockaddr *)&sin, sizeof(sin)) ... という感じでsockaddr_inからsockaddrへキャストするのがお約束.swiftではこれをストレートに表現できないので,Exte
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く