Swift,Objective-Cプログラミング ~ iOS ~

Objective-C,Swift,Apple Watchなどのプログラミング

【iOS Swift入門 #232】関数型プログラミングとジェネリクスで配列内の重複排除

Swiftの配列関数では、mapやfilter, reduceなど、
配列を操作する関数が用意されている。

配列の重複を排除する関数は用意されていないので、作成する。

func distinct<TEquatable>(source: [T]) -> [T] {
     var unique = [T]()
     for item in source {
          if !contains(unique, item) {
               unique.append(item)
          }
    }
    return unique
}

ジェネリクスで指定しているEquatableプロトコルとはなにか?
オブジェクトが==で比較できるようになっていること。
Equatableプロトコルを実装しているとcontains関数が使えるのだ。

例えば、文字列や数値はEquatableプロトコルを実装している。

独自クラスを作成し、上記の重複排除の関数を利用する場合は、
Equatableプロトコルを実装する必要がある。

Equatableプロトコルで実装するメソッドは下記の通り。

func ==(lhs: CustomClass, rhs: CustomClass) -> Bool {

    // lhsとrhsの何が等しければ、==とするかの処理を書く

    return lhs === rhs
}

■独自クラスで重複排除を試す

import UIKit

// 重複排除の関数定義
func distinct<TEquatable>(source: [T]) -> [T] {
     var unique = [T]()
     for item in source {
          if !contains(unique, item) {
               unique.append(item)
          }
    }
    return unique
}

// カスタムクラスの定義
class CustomClass:Equatable{
    let name:String!
    let hobby:String!

        init(name:String, hobby:String){
            self.name = name
            self.hobby = hobby
        }
}

// Equatableプロトコルの実装
func ==(lhs: CustomClass, rhs: CustomClass) -> Bool{
    return lhs.name == rhs.name
}

// カスタムクラスで重複排除を試す
let yamada = CustomClass(name: "山田", hobby: "スキー")
let yamada2 = CustomClass(name:"山田", hobby: "ゲーム")
let tanaka = CustomClass(name:"田中", hobby: "ゲーム")

println(yamada==yamada2)
println(yamada==tanaka)

let persons = [yamada, tanaka, yamada2]
for person in distinct(persons){
    println(person.name)  // 山田と田中の2つが表示される。
}

【参考情報】
iOSアプリ開発未経験の人向け
iOSアプリ開発をはじめたとき最初に買った書籍
【アプリ作成未経験の人向け】
Storyboardを使って画面を作成していく。
手順にしたがって操作していくと、ボタンの作成やWebViewの作成などができる。
アプリって、こんな感じで作るんだというのを体験できる。

Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】

Swiftではじめる iPhoneアプリ開発の教科書 【iOS 8&Xcode 6対応】

・わかりやすくていい、と聞いた本
立ち読みした感じだと【アプリ作成未経験の人向け】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

②を終えたくらいの知識の方向け
・アプリ開発独学中に2冊めに購入した書籍
プログラミング知識はなくても、若干理解するのに時間がかかる程度で、
読み進められるわかりやすさがある。

iPhoneアプリ開発塾

iPhoneアプリ開発塾

③中級者、上級者向け

詳解 Swift

詳解 Swift