[Swift]エラー処理


ガイドルート-iOSプログラミングのSwiftベース


1.エラー表示


エラーは、
  • Errorプロトコルおよび(プライマリ)列挙によって表される.
  • enum LocationManagerError: Error {
      case authorizationDenied
      case coordinateError
    }

    2.放出関数のエラー

  • エラーが発生する可能性のあるメソッドは、throwsを使用してエラーを隠す関数として表示されます.
  • func requestLocation(completion: @escaping (_ coordinate: CLLocationCoordinate2D) -> ()) throws {
      locationManager.delegate = self
      guard CLLocationManager.locationServicesEnabled() else {
        throw LocationManagerError.authorizationDenied
      }
      locationManager.requestWhenInUseAuthorization()
      locationManager.requestLocation()
      locationManager.desiredAccuracy = kCLLocationAccuracyBest
      guard let coordinate = locationManager.location?.coordinate else {
        throw LocationManagerError.coordinateError
      }
      completion(coordinate)
    }

    3.エラー処理

  • エラーが放出されないように、コードを記述する必要があります.
  • do-catch

      do {
        try locationManger.requestLocation(){ coordinate in
          currentLocationViewModel.convertToAddress(latitude: coordinate.latitude, longtitude: coordinate.longitude, completion: {
            let locationName = $0
            fineDustViewModel.loadFineDust(latitude: coordinate.latitude, longtitude: coordinate.longitude, completion: {
              let entry = simpleEntry(currentDate: currentDate,
                                      locationName: locationName,
                                      fineDust:  $0.fineDust,
                                      ultraFineDust: $0.ultraFineDust,
                                      configuration: configuration)
              let refreshDate = Calendar.current.date(byAdding: .minute, value: 30, to: currentDate)!
              let timeline = Timeline(entries: [entry], policy: .after(refreshDate))
              completion(timeline)
            })
          })
        }
      } catch {
        let entry = simpleEntry(currentDate: currentDate,
                                locationName: "오류",
                                fineDust: fineDustViewModel.fineDust("-"),
                                ultraFineDust: fineDustViewModel.ultraFineDust("-"),
                                configuration: configuration)
        let refreshDate = Calendar.current.date(byAdding: .second, value: 10, to: currentDate)!
        let timeline = Timeline(entries: [entry], policy: .after(refreshDate))
        completion(timeline)
      }
    }

    try?

  • 単独のエラー処理結果の通知が受信されず、エラーが発生した場合、結果をnilに返すことができます.
  • が正常に動作すると、傍観者タイプで正常な戻り値が返されます.
  • try!

  • エラーが発生しないと確信したらtry!通常の操作後すぐに結果値を返すには、を使用します.
  • エラーは、ランタイムエラーを引き起こし、アプリケーションの動作を停止します.
  • SWIFT 3.0のthrowsとrethrowsについて...


    rethrows

  • パラメータを用いて投げ関数を受信する場合、投げ関数を受信する関数ではエラー処理を行わず、前に受信した関数でエラー処理を行う.
  • 位の場合は、バックを書かずに投げても問題ありませんが、関数からミスを受け取ったと推測して投げたのか、自分でミスを恐喝したのかを区別するのがベストです.
  • defer构文の理解


    defer


    現在のコードブロックから離れる前に、実行しなければならないコードを記述し、コードがどうしてもそのブロックから離れても完了しなければならないタスクを実行させることを指す.
    func test() {
        defer {
            print("실행 2")
        }
    
        print("실행 1")
    }
    
    // 실행 1
    // 실행 2