LoginSignup
2
4

More than 5 years have passed since last update.

Swiftのココが解らない新人プログラマーのメモ

Last updated at Posted at 2018-04-29

これなに?

30歳でも新人は新人。
Swiftの基礎を勉強しながら、社内で活用されているRxと奮闘。
そんな、新人プログラマーの悩みどころを書いていき、解決策を追記していきたい。
ベテランプログラマーさんは、新人の悩みどころが分かるかもしれない...?

ですので、この記事は更新してブラッシュアップしていきます。

困ったさんポイント

enumってなに?どんな場面で使うの?
protocolの使い方。
delegateとは何?

enumってなに?どんな場面で使うの?

私はこう使った。
あるデータはString型で定義されており、
毎回、文字列を書いて比較するのは修正箇所が増えると考え、
ここで定義した内容を共通項目として扱いたかった。

// itemStringDataのデータを比較するためにStringとした
enum itemList : String{
    // 値A
    case itemA = "A"
    // 値B
    case itemB = "B"
    // 値C
    case itemC = "C"
    // 値D
    case itemD = "D"
    // 値E
    case itemE = "E"
}

...別な箇所で

// itemStringDataは文字列なのでenumを使って判断させたい。
 switch itemStringData {

 case itemList.itemA.rawValue:
     return 処理

 case itemList.itemB.rawValue:
     return 処理

 case itemList.itemC.rawValue:
     return 処理

 default:
     return 処理
 }

しかし、このコードはコードレビューでNGを食らった。
理由は、文字列比較をしているからとのこと。
そもそも、enumを共通項目として定義し文字列比較を統一したかったのだが、それが間違いだったようだ。

enumの正しい使い方は一体...困った。

どうあるべきか?

参考にさせて頂いた記事
【Swift】列挙型(enum)を.rawValueなしで呼ぶにはcaseを使わない
コメント欄が主軸のお話。

enumを使った比較は、enumに変換して比較する。
比較対象が増えたりした場合、enumを修正すればいいし、
ヘンテコなデータが来てもしっかりと弾いてくれる。

protocolの使い方。

共通項目として明示的に定義して使う。
その認識は間違っているのだろうか。

protocol Hoge {
//プレイヤーの装備情報
 func soubi()
}

extension Hoge {

 func soubi(){
 //共通処理
 }

}

struct Moge: Hoge{
 func soubi()
}

protocol Hogeを書くことで、明示的に共通項目soubiがあることが分かる。
という感覚。
MVCMVVMClean Architectureなどのそれぞれの層での受け渡しはProtocol化?
んー利点や理由がよくわかっていない。

どうあるべきか?

理解が深まり、自分で飲み込めたらここに考え方と正解を書く。

delegateとは何?

さっぱり。
他の方の記事みてる程度...
処理を代行して行なう。
それだけ、使い道もわからん。

どうあるべきか?

理解が深まり、自分で飲み込めたらここに考え方と正解を書く。

こんな感じで、Swiftの基礎もよくわかっていないので、色々書き留めていきたい。😢
2
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4