May 18、2021、TIL(Today I Learned)-enumタイプ、今はこのような間違いを犯す必要はありません


学習内容


テストのために、次のようにSample apiを作成しました.

でもこれはテストでどう使えばいいのか悩んだままタイプで先に実現しました

しかし,オプションバインドで抽出しようとしたところ,nil値を返す問題が見つかった.

この過程で、私はenumに対する知識がどれだけ不足しているかを意識しました.
だから列挙型についてもっと勉強しました

列挙式の運用


「列挙型」はインスタンスを作成できないのか悩んだ結果、うまく説明してくれたブログのおかげで、列挙型についての理解が少し増えました.改めてありがとう.
「列挙型は、クラスや構造などの計算プロセスとメソッドを内部で定義できます.インスタンスは作成できませんが、インスタンスのように使用できます.したがって、インスタンス・プロシージャ、タイプ・プロシージャ・メソッドを定義できます.」
enum ImageFormat {
	case JPEG
	case PNG(Bool)
	case GIF(Int, Bool)
}

var image = ImageFormat.PNG(true)
	imgae = .GIF(256, false)
列挙を構成した後、caseでimageというインスタンスを宣言できることを覚えています.
そこで,今回のプロジェクトテストでも同様の応用が行われた.
class OpenMarketNetworkTests: XCTestCase {
  // sampleOpenMarketAPI 프로퍼티 구현
  var sampleOpenMarketAPI: SampleOpenMarketAPI!
  
  override func setUpWithError() throws {
    // 열거형을 인스턴스처럼 사용
    sampleOpenMarketAPI = .connection
    try super.setUpWithError()
  }
  
  override func tearDownWithError() throws {
    // 테스트가 끝난뒤 인스턴스 제거
    sampleOpenMarketAPI = nil
  }
}
おかげさまで、以下の疑問を解消しました.😁
[参考]:
SWIFT列挙と拡張|hwiVelopr

懸念する。


質問する


なぜenum typeはインスタンスを作成し、そのインスタンスを介して変数にアクセスできないのですか?sampleOpenMarketAPI.itemListURL

問題の原因


この変数の初期値はsetUpWithError()に宣言されていないためです.

解決策


  • タイプがpropertyとして宣言されると、setUpWithError()は、列挙されたcaseを初期値として割り当てて解析する
    override func setUpWithError() throws {
        // 열거형을 인스턴스처럼 사용
        sampleOpenMarketAPI = .connection
        try super.setUpWithError()
      }

  • タイプ自体のメソッド
    このような列挙型のタイプ→case→変数などの方法は近い.SampleOpenMarketAPI.connection.itemListURLは可能です.
  • このようにしてインスタンスを作成できます.

    懸念する。


    質問:よくわかりませんが...

    class OpenMarketAPIProvider {
        let urlSession: URLSession
        
        init(urlSession: URLSession) {
            self.urlSession = URLSession.shared
        }
    }
    class OpenMarketAPIProvider {
        let urlSession: URLSession
        
        init(urlSession: URLSession = .shared) {
            self.urlSession = urlSession
        }

    差異Understod


    第1の例は、urlSession定数として初期化するのではなく、urlSession定数として初期化を無条件にurlSessionの共有セッションとして初期化することを示す.すなわちurlSessionの構成を変更して入力値を受信しても無条件にurlSessionを行う.共有に初期化します.
    2つ目の例は、初期値を設定する場合、私が特定の入力値を入力しない場合、URLセッションです.これはsharedを使用して初期化することを意味します.