2014年10月26日日曜日

Swift 学習チートシート3

Swift 学習メモ3

  • xcode6.0.1

基本知識のまとめ


1.enum
1.1.scalaとほぼ同じ

* apple公式に記載されているself.rawValueはなくなったっぽい

enum Rank: Int {
    case Ace = 1
    case Two, Three, Four, Fice, Six, Seven, Eight, NIne, Ten
    case Jack, Queen, King
    func simpleDescription() -> String {
        switch self {
        case .Ace:
            return "ace"
        case .Jack:
            return "jack"
        case .Queen:
            return "queen"
        default:
            return "ng"
        }
    }
}

let ace = Rank.Ace
ace.toRaw()
ace.simpleDescription()
let two = Rank.Two
two.toRaw()
let jack = Rank.Jack
jack.toRaw()

返り値がintなので、値は順番に割り当てられるようだ。微妙な仕様だ。

1.2.値の自動割当なし

enum Suit {
    case Spades, Hearts, Diamonds, Clubs
    func simpleDescription() -> String {
        switch self {
        case .Spades:
            return "Spades"
        case .Hearts:
            return "Hearts"
        default:
            return "ng"
        }
    }
}

let hearts = Suit.Hearts
hearts.simpleDescription()

こっちのほうがしっくりくるし、よく使いそう。

2.struct
classと基本同じ。あんま使わない。

struct Card {
    var rank : Rank
    var suit : Suit
    func simpleDescription() -> String {
        return "rank \(rank.simpleDescription()) , suit\(suit.simpleDescription())"
    }
}

let card = Card(rank: .Three, suit: .Spades)
card.simpleDescription()

class Card2 {
    var rank : Rank
    var suit : Suit
    init(rank: Rank, suit: Suit) {
        self.rank = rank
        self.suit = suit
    }
    
    func simpleDescription() -> String {
        return "rank \(rank.simpleDescription()) , suit\(suit.simpleDescription())"
    }
}

let card2 = Card2(rank: .Three, suit: .Spades)
card.simpleDescription()

クラスの場合はinitがないとコンパイルできない

2.Protocol
クラスやstructを拡張する
objective-cと一緒。rubyのmixinのほうが好み。

protocol ExampleProtocol {
    var simpleDescription: String {get}
    mutating func adjust()
}

class SimpleClass: ExampleProtocol {
    var simpleDescription: String = "a vert simple class"
    var anotherProperty: Int = 69105
    func adjust() {
        simpleDescription += "adjust"
    }
    
}

var a = SimpleClass()
a.adjust()

mutatingは名前付け。javaのabstructみたいなもんかな。

3.extension
型の拡張
rubyのオープンクラスと同じ。これはrubyより洗練されている

extension Int: ExampleProtocol {
    var simpleDescription: String {
        return "The number \(self)"
    }
    mutating func adjust() {
        self += 42
    }
}

10.simpleDescription

4.Generics
まんまjava。このサイトではandroidでいつも紹介しているので割愛。

以上でA Swift Tourは終了。複数言語のプログラムを習得していればこのA Swift Tourを終了させればそこそこswiftでプログラムがかけると思います。
appleのLanguage Guideをみるとsubscriptとかclosureについて記載してあるので、使いたいと思う機能を写経しましょう。

というわけで次からは本格的にサンプルアプリの作成をしていきたいと思います。でわ。

ちなみにA Swift Tourはブログ用に写経しながらで5hくらいでした。参考までに。

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...