1. Pattern match with case class 佐々木 海(Sasaki Kai) 第2回Swift勉強会 @TechBuzzSpace 2. Who am I? 佐々木 海(Sasaki Kai) @Lewuathe プラットフォームエンジニア emailとか、Push通知とか C/C++, nodejs, Python iOSアプリは普段作ってません
If you have already started playing with swift, you probably thought about how to include third party libraries into your project or how to distribute yours. Apple provides a mechanism to distribute code via frameworks (eventually, for iOS too), so making a custom framework, which will include both ObjC and Swift code is very easy. But let’s dig deeper and create a pure Swift module, like apple do
はじめに AppleがSwiftという言語を発表した。 新しい言語をつくるのであれば既存の言語から良いアイディアは取り入れ悪いアイディアは取り入れないのが良い。 TwitterのTLを見ていると「Swiftは○○に似ている」という発言があったので、 どこら辺が似ているのかを自分の中で振り返ってみた。 (最初は「Swiftは○○のパクり」というタイトルにしたかったのだが、文全体を挑発的に書けなかったのでやめた) 間違っていることもあるはずなので、コメントは大歓迎である。 全部紹介するのは無理なので、とりあえず A Swift Tour から引用したい。 基本文法 基本文法はC言語系だ。現在の手続き型言語はC++やJava等これが主流である。 (主流でない文法はFORTRAN、BASIC、Pascalなどなど。関数型だとまた全く違う) Simple Values letやvarのように、型から
Objective-CじゃなくてSwiftのライブラリを利用する方法、また、自分で作る方法
Xcode6 Beta5からまだ2週間ですが、Xcode6 Beta6が登場しています。この調子で二週間ごとにベータ版出すのかなApple... というわけで前回に引き続き、ダウンロード待ちの手慰みに。 Xcode 6 beta 6 Release Notes Optional型に関するさらなる改良 Foundation APIにおけるOptional型の見直しがさらに進んでいます。T!の多くが、nilを取りうる場合はT?、そうでない場合はTへと変更されています。間違いを見つけた方は、“#IUO”をSubjectに含めた上でRadarでご報告ください。なお、T!のまま据え置かれているものに関しては報告不要です。Appleでも把握しています。 T?であるべきところがTとなっている場合、以下のように明示的にOptional型を指定して代入したのち直ちにアンラップすることで回避できます。 var
Written by Mattt August 22nd, 2018 (revised) This article has been translated into: 한국어 In 1911, linguist Franz Boas observed that speakers of Eskimo–Aleut languages used different words to distinguish falling snowflakes from snow on the ground. By comparison, English speakers typically refer to both as “snow,” but create a similar distinction between raindrops and puddles. Over time, this simple
Swiftの実験的なプロジェクトとしてActiveSupportの拡張っぽく直感的に時間を扱うライブラリ"Timepiece"というものを書いた。 naoty/Timepiece · GitHub demo let today = NSDate.today() let tomorrow = NSDate.tomorrow() let dayAfterTomorrow = tomorrow + 1.day let dayBeforeYesterday = 2.days.ago let birthday = NSDate.date(year: 1987, month: 6, day: 2) 機能 1.day.ago(1日前)、4.years.later(4年後)というようにInt型を拡張し、数.単位.前/後という書き方でNSDateオブジェクトを初期化できる。単位は単数形、複数形どちらも使える
Been chatting about 1.0 — when it’s coming, what it will involve. The only thing that seems likely is that 1.0 will compile for 8.0, not that 1.0 will be code stable or act as a language development endpoint. Chris Lattner wrote, “Our goal for Swift 1.0 is for *apps* to be binary compatible with the OS, not for Swift 1.0 frameworks to be compatible with swift 2.0 frameworks. The formal goal (what
Written by Mattt October 3rd, 2018 (revised) This article has been translated into: 中文 What would a program be without operators? A mishmash of classes, namespaces, conditionals, loops, and namespaces signifying nothing. Operators are what do the work of a program. They are the very execution of an executable; the teleological driver of every process. Operators are a topic of great importance for
error: 'fork()' is unavailable: Please use threads or posix_spawn*() これはCocoaフレームワークがfork-safeでないからのようです。これ自体は自分の脚をうっかり撃たなくていい仕組みで歓迎しますが、危険を承知で fork(2) を使いたいこともあります。そんなとき、 @asmname でCの関数をSwiftにマッピングすることができます。これで自分の脚も撃ち放題ですね。 #!/usr/bin/xcrun swift import Darwin // `let pid = fork()` はコンパイルエラーになるのでシンボルを直接参照する @asmname("fork") func myFork() -> pid_t let pid = myFork() if pid != 0 { waitpid(pid, nil,
Swiftではデフォルト状態だとtupleの比較が出来ないというのは以前書いた通りだが、関数どうしも===できないので、出来るようにしてみた。 SYNOPSIS func peekFunc<A,R>(f:A->R)->(fp:Int, ctx:Int) { // let (hi, lo):(Int, Int) = reinterpretCast(f) typealias IntInt = (Int, Int) let (hi, lo) = unsafeBitCast(f, IntInt.self) let offset = sizeof(Int) == 8 ? 16 : 12 let ptr = UnsafePointer<Int>(lo+offset) return (ptr.memory, ptr.successor().memory) } @infix func === <A,R>(
IterationsOne fundamental brick in programming is iterations. All modern programming languages have them and swift is no exception. Just as it’s predecessor Swift offers the many varieties from C/C++ iterations, like do/while/for in different combinations but also offers a more modern approach with for/in (foreach in some other languages) for fast enumeration. Swift also offers a more modern synta
Swiftオフィシャルの部分適用 まず、Swiftオフィシャルな構文として func addTwoNumbers(a: Int)(b: Int) -> Int { return a + b } というように引数を1つ1つ別の括弧で囲ってfunctionを定義すると let add1 = addTwoNumbers(1) add1(b: 2) //< 3 というかんじに、 まず、1つめの引数だけ部分適用(ここでは a) 部分適用したものに後から次の引数を適用(ここでは b) というのができる。 専用の書き方じゃなくてふつうのfunctionに部分適用できないの? 使うかどうかは別としてHaskellみたいに全ての関数に部分適用できたら面白いなーと。 また、上のような専用の定義にしちゃうと addTwoNumbers(1, 2) みたいな普通の呼び方ができなくなっちゃうし。 そんなとき、 Sw
だとしたら、Swiftではカリー化は不要ということになってしまう。 すなわち、ざっくり言うとカリー化とは複数の引数を1つに減らすことを指します - Swiftで関数のカリー化(currying)入門 Swiftの関数は、つねに一つの値を受け取り、一つの値を返すのだから。 以下のコードを動かしてみれば、それがわかる。 func call<A,R>(f:A->R, a:A)->R { return f(a) } func id(i:Int)->Int { return i } func add(x:Int, y:Int)->Int { return x + y } call(id, 42) // 42 call(add, (21,21)) // 42 上記のcall()は、「『型Aの値を一つだけ取って型Rの値を返す関数』と『型Aの値』を取って『型Rの値』を返す関数」なはずなのに、「IntとIn
Written by Nate Cook & Mattt July 11th, 2018 (revised) This article has been translated into: 中文 Code structure and organization is a matter of pride for developers. Clear and consistent code signifies clear and consistent thought. Even though the compiler lacks a discerning palate when it comes to naming, whitespace, or documentation, it makes all the difference for human collaborators. This week
ああなんてもったいない誤解。 ということでUnsafePointer.alloc()でアンセーフなメモリを確保して、その中に返してもらって、利用後に速やかに破棄するという感じにしかならないようです。 - SwiftからMachのhost_info()を呼び出す(UnsafePointerのキャスト) Cの構造体はそのままSwiftの構造体として使える Cの構造体も、Swiftの構造体と同じ流儀で扱えます UnsafePointer<cstruct>を要求する関数には、&cstructを渡すだけでおk 実際にご覧いただきましょう。 import Darwin // もちろんFoundationでもおk func lastModified(path:String)->String? { var st = stat() // *1 let err = path.withCString { //
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く