これなに?
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
があることが分かる。
という感覚。
MVC
やMVVM
、Clean Architecture
などのそれぞれの層での受け渡しはProtocol化?
んー利点や理由がよくわかっていない。
どうあるべきか?
理解が深まり、自分で飲み込めたらここに考え方と正解を書く。
▼delegate
とは何?
さっぱり。
他の方の記事みてる程度...
処理を代行して行なう。
それだけ、使い道もわからん。
どうあるべきか?
理解が深まり、自分で飲み込めたらここに考え方と正解を書く。