タグ

SWIFTとarrayに関するclavierのブックマーク (7)

  • SwiftのArrayがミュータブルでもCovariantな理由 - Qiita

    class Animal {} class Cat: Animal {} var cats: Array<Cat> = [Cat(), Cat()] var animals: Array<Animal> = cats // 実体はCatのArrayのはずなのにAnimalを格納できる!? animals[0] = Animal() これを見ると型安全性がぶっ壊れてるんじゃないかと思ってしまいますが、そうではありません。SwiftのArrayにとってこれは安全な挙動です。 Covariantなコレクション (A) のように、 Cat が Animal の派生型なら Array<Cat> も Array<Animal> の派生型となるとき、 Array は Covariant(共変) であると言います[*1]。 Array<Cat> に Animal オブジェクトが格納できてしまうように、ミュ

    SwiftのArrayがミュータブルでもCovariantな理由 - Qiita
  • Swift の Array / Dictionary は最適化なしでは遅い (Xcode 6.1 / iOS 8.1 更新)

    Swift の Array/Dictionary は最適化なしでコンパイルした場合, 実行速度が遅くなります. NSMutableArray/NSMutableDictionary と比べてもかなり遅い結果となります. テストコード この問題をテストするために単純なサンプルコードを作成しました. NSMutableArray と Swift の Array にそれぞれ 1,000,000 個の要素を追加するコードと, NSMutableDictionary と Swift の Dictionary に 100,000 個の要素を追加するコードです. OS X の Swift は現時点で Beta とされているため, iOS アプリケーションとして作成しました. 利用したコードは GitHub で公開しています. コンパイルと実行 Xcode でプロジェクトファイルを開き, コンパイルし実行

    Swift の Array / Dictionary は最適化なしでは遅い (Xcode 6.1 / iOS 8.1 更新)
  • SwiftのArrayのハマりどころのまとめ - Qiita

    Swiftも1.0がリリースされ、SwiftでiOSアプリを申請できるようになりました。Swiftはとても学びやすい言語ですが、 Array (や Dictionary )の挙動については最初戸惑う人が多いのではないかと思います。そこで、Swiftを学習するときに Array についてハマりそうな点をまとめました。 多くの言語では配列やリストは 参照型(Reference Type) として扱われますが、 Swiftの Array は 値型(Value Type) です。配列やリストが参照型である言語(Objective-C、C#、JavaJavaScriptPythonRuby、…)に慣れ親しんでいる人ほど、この違いに戸惑うのではないかと思います。 稿では Arrayが値型であることによってハマりがちなポイントについてまとめます 。個別のメソッドの使い方などでハマりがちな点につい

    SwiftのArrayのハマりどころのまとめ - Qiita
  • SwiftのArrayが実はすばらしかった - Qiita

    先日SwiftのArrayがヤバイという投稿をしましたが、その後仕様が変更されたこともあり、考えれば考えるほど SwiftのArrayがすばらしいように思えてきました。 SwiftのArrayがすばらしいと思うのは、 Arrayが参照型ではなく値型であることで無駄なコピーが回避できる からです。単純に考えると、代入の度にコピーが発生する値型の方が無駄なコピーが発生しそうなものです。 なお、投稿ではArrayのみを扱いますが、Dictionaryについてもまったく同じことが言えます。 可変長配列は普通は参照型なんじゃないの? 多くの言語では可変長配列は参照型として実装されています。しかし、SwiftのArrayは値型でした。最初にそれを知ったとき、気持ち悪い言語だなぁと思いました。 値型はその性質上、メモリ上でのサイズが固定されている必要があります[*1]。そのため、可変長配列のようにサイ

    SwiftのArrayが実はすばらしかった - Qiita
  • SwiftのArrayとDictionaryの使い方 - hachinoBlog

    背景 基的な言語仕様はふんわりと学んだので、今後多用するであろうArrayとDictionaryの使い方を調べたのでメモ。 Array サンプルコード // immutableなString型の配列 let names: String[] = ["name5", "name2", "name1", "name3"] //各データを取得 let name1 = names[0] //name5 let name2 = names[1] //name2 let name3 = names[2] //name1 let name4 = names[3] //name3 //各件数 names.capacity // 4 names.startIndex // 0 names.endIndex // 4 names.count // 4 // mutableなString型の配列 var pro

    SwiftのArrayとDictionaryの使い方 - hachinoBlog
  • [Swift] Sequence実装のサンプル(独自クラスのリスト) | 目くじら日記

    SequenceTypeを実装することによって独自クラスをfor-inなどでループ処理することが可能になります。 SequenceTypeプロトコルは func generate() -> GeneratorType だけを実装すれば良いのですが、 今回のサンプルでは二分探索(バイナリサーチ)によるジェネリックスなSortedListを実装してみました。 使い方はこんな感じです // イニシャライザで比較関数を渡す // この例ではクロージャを使っています let sortedList = SortedList<Int>(){ (left:Int,right:Int)-> CompareResult in if (left == right) { return .Equal } else if (left > right) { return CompareResult.LeftLarge

  • Swiftのmapは処理だけしてVoid返すことは出来ないから気ィ付けや - 定食屋おろポン

    追記 この記事の情報は古いので注意して下さい。 最新のXcodeでは、mapに返り値を持たないクロージャを渡しても問題ありません。 追記ここまで SwiftのArrayは、非破壊的なメソッド、mapを持っています。素晴らしい。 enumerateObjectsUsingBlock:とか書いてられませんよホントに。メソッド名が長いのはともかくBlocksの記法がfuckingblocksyntaxでうんざりします。 mapの宣言はfunc map<U>(transform: (T) -> U) -> Array<U>となっています。 Haskellでいうところのmap :: (t -> u) -> [t] -> [u]ですね。 T型の要素を持つArrayと、T型を引数に取ってU型を返すクロージャがあります。T型のArrayの全ての要素にクロージャを適用し、U型のArrayを返すのがmapです

    Swiftのmapは処理だけしてVoid返すことは出来ないから気ィ付けや - 定食屋おろポン
  • 1