学習(SWIFT基本文法)-4
try-catch enum PhoneError: Error {
case unknown
case batteryLow(batteryLevel: Int)
}
Errorを表すためには、Errorプロトコルを使用する必要があります.
エラーの処理方法
関数を呼び出すコードに関数のエラーを伝播する
func checkPhoneBatteryStatus(batteryLevel: Int) throws -> String {
guard batteryLevel != -1 else { throw PhoneError.unknown }
guard batteryLevel > 20 else { throw PhoneError.batteryLow(batteryLevel: batteryLevel) }
return "배터리 상태가 정상입니다."
}
do-catch構文
do {
try checkPhoneBatteryStatus(batteryLevel: -1)
} catch PhoneError.unknown {
print("알 수 없는 에러입니다.")
} catch PhoneError.batteryLow(let batteryLevel) {
print("배터리 전원 부족, 남은 배터리 : \(batteryLevel)%")
} catch {
print("그 외 오류 발생 : \(error)")
}
オプションで処理
let status1 = try? checkPhoneBatteryStatus(batteryLevel: -1)
print(status1) // nil
let status2 = try? checkPhoneBatteryStatus(batteryLevel: 30)
print(status2) // Optional("배터리 상태가 정상입니다.")
発生したエラーをtry?
に処理すると、nil
に戻ります.
エラーが発生しないと確信した場合は、try!
を使用してOptional
を強制解除することができます.(推奨X)
エンクロージャ
一級オブジェクト
伝達パラメータとして送信してもよいし、変数/定数を格納または伝達してもよいし、関数の戻り値としてもよい.{ (매개 변수) -> 리턴 타입 in
실행 구문
}
変数または定数の入力
let hello1 = { () -> () in
print("hello")
}
hello1() // hello
let hello2 = { (name: String) -> String in
return "Hello, \(name)"
}
hello2("Park") // Hello, Park
一般関数を呼び出すように、hello2(name: "Park")
のように使用するとエラーが発生します.パラメータラベルを渡すには、多くのことを書きます.
パラメータとして関数に渡す
func doSomething1(closure: () -> ()) {
closure()
}
doSomething1(closure: { () -> () in
print("hello")
}) // hello
関数として使用される戻りタイプ
func doSomething2() -> () -> () {
return { () -> () in
print("hello")
}
}
doSomething2()() // 매개변수를 넣을 수 있는 곳이 2곳이라 이렇게 쓰나 보다.
後続エンクロージャ
後続のモジュールを使用すると、モジュールの説明を簡略化できます.
複数のパラメータキャビネットが渡された場合、後続のキャビネットとして使用できるのは、最後のパラメータに対応するキャビネットのみです.doSomething1() {
print("hello")
}
1つのモジュールのみをパラメータとして渡す場合は、パラメータ部分のカッコを省略することもできます.doSomething1 {
print("hello")
}
複数の後続エンクロージャ
複数のパラメータエンクロージャが渡された場合:func doSomething3(success: () -> (), fail: () -> ()) {
}
doSomething3 {
실행 코드
} fail: {
실행 코드
}
最初のモジュールはパラメータラベルの転送を省略します
モジュール表示を簡略化する方法
func doSomething4(closure: (Int, Int, Int) -> (Int)) {
closure(1, 2, 3)
}
doSomething4(closure: { (a, b, c) in
return a + b + c
}) // 일반적인 호출
doSomething4(closure: {
return $0 + $1 + $2
}) // 파라미터 형식 생략
doSomething4(closure: {
$0 + $1 + $2
}) // 리턴 형식 생략(블록에 리턴 구문만 남는 경우에만 가능)
doSomething4() {
$0 + $1 + $2
} // 후행 클로저 사용
doSomething4 {
$0 + $1 + $2
} // 매개변수로 하나의 클로저만 전달되기 때문에 소괄호까지 생략 가능
高次関数
別の関数を、伝達パラメータまたは関数の実行結果を返す関数として受信します.
(map, filter, reduce)
map
let numbers = [0, 1, 2, 3]
let mapArray = numbers.map { (number) -> Int in
return number * 2
}
print("map \(mapArray)") // map [0, 2, 4, 6]
filter
let intArray = [10, 5, 20, 13, 4]
let filterArray = intArray.filter { $0 > 5 } // 위에서 다룬 클로저 단순화 사용
print("filter \(filterArray)") // filter [10, 20, 13]
reduce
let someArray = [1, 2, 3, 4, 5]
let reduceResult = someArray.reduce(0) {
(result: Int, element: Int) -> Int in
print("\(result) + \(element)")
return result + element
} // 0은 초기값, result에는 누적값, element는 배열의 원소
print("reduce \(reduceResult)")
/*
0 + 1
1 + 2
3 + 3
6 + 4
10 + 5
reduce 15
*/
ソース
快速キャンパス、超差コース:SWIFTを使用して30項目のiOSアプリケーションを開発
Reference
この問題について(学習(SWIFT基本文法)-4), 我々は、より多くの情報をここで見つけました
https://velog.io/@tony1803/iOS-공부-Swift-기본-문법-4
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
enum PhoneError: Error {
case unknown
case batteryLow(batteryLevel: Int)
}
func checkPhoneBatteryStatus(batteryLevel: Int) throws -> String {
guard batteryLevel != -1 else { throw PhoneError.unknown }
guard batteryLevel > 20 else { throw PhoneError.batteryLow(batteryLevel: batteryLevel) }
return "배터리 상태가 정상입니다."
}
do {
try checkPhoneBatteryStatus(batteryLevel: -1)
} catch PhoneError.unknown {
print("알 수 없는 에러입니다.")
} catch PhoneError.batteryLow(let batteryLevel) {
print("배터리 전원 부족, 남은 배터리 : \(batteryLevel)%")
} catch {
print("그 외 오류 발생 : \(error)")
}
let status1 = try? checkPhoneBatteryStatus(batteryLevel: -1)
print(status1) // nil
let status2 = try? checkPhoneBatteryStatus(batteryLevel: 30)
print(status2) // Optional("배터리 상태가 정상입니다.")
一級オブジェクト
伝達パラメータとして送信してもよいし、変数/定数を格納または伝達してもよいし、関数の戻り値としてもよい.
{ (매개 변수) -> 리턴 타입 in
실행 구문
}
変数または定数の入力
let hello1 = { () -> () in
print("hello")
}
hello1() // hello
let hello2 = { (name: String) -> String in
return "Hello, \(name)"
}
hello2("Park") // Hello, Park
一般関数を呼び出すように、hello2(name: "Park")
のように使用するとエラーが発生します.パラメータラベルを渡すには、多くのことを書きます.パラメータとして関数に渡す
func doSomething1(closure: () -> ()) {
closure()
}
doSomething1(closure: { () -> () in
print("hello")
}) // hello
関数として使用される戻りタイプ
func doSomething2() -> () -> () {
return { () -> () in
print("hello")
}
}
doSomething2()() // 매개변수를 넣을 수 있는 곳이 2곳이라 이렇게 쓰나 보다.
後続エンクロージャ
後続のモジュールを使用すると、モジュールの説明を簡略化できます.
複数のパラメータキャビネットが渡された場合、後続のキャビネットとして使用できるのは、最後のパラメータに対応するキャビネットのみです.
doSomething1() {
print("hello")
}
1つのモジュールのみをパラメータとして渡す場合は、パラメータ部分のカッコを省略することもできます.doSomething1 {
print("hello")
}
複数の後続エンクロージャ
複数のパラメータエンクロージャが渡された場合:
func doSomething3(success: () -> (), fail: () -> ()) {
}
doSomething3 {
실행 코드
} fail: {
실행 코드
}
最初のモジュールはパラメータラベルの転送を省略しますモジュール表示を簡略化する方法
func doSomething4(closure: (Int, Int, Int) -> (Int)) {
closure(1, 2, 3)
}
doSomething4(closure: { (a, b, c) in
return a + b + c
}) // 일반적인 호출
doSomething4(closure: {
return $0 + $1 + $2
}) // 파라미터 형식 생략
doSomething4(closure: {
$0 + $1 + $2
}) // 리턴 형식 생략(블록에 리턴 구문만 남는 경우에만 가능)
doSomething4() {
$0 + $1 + $2
} // 후행 클로저 사용
doSomething4 {
$0 + $1 + $2
} // 매개변수로 하나의 클로저만 전달되기 때문에 소괄호까지 생략 가능
高次関数
別の関数を、伝達パラメータまたは関数の実行結果を返す関数として受信します.
(map, filter, reduce)
map
let numbers = [0, 1, 2, 3]
let mapArray = numbers.map { (number) -> Int in
return number * 2
}
print("map \(mapArray)") // map [0, 2, 4, 6]
filter
let intArray = [10, 5, 20, 13, 4]
let filterArray = intArray.filter { $0 > 5 } // 위에서 다룬 클로저 단순화 사용
print("filter \(filterArray)") // filter [10, 20, 13]
reduce
let someArray = [1, 2, 3, 4, 5]
let reduceResult = someArray.reduce(0) {
(result: Int, element: Int) -> Int in
print("\(result) + \(element)")
return result + element
} // 0은 초기값, result에는 누적값, element는 배열의 원소
print("reduce \(reduceResult)")
/*
0 + 1
1 + 2
3 + 3
6 + 4
10 + 5
reduce 15
*/
ソース
快速キャンパス、超差コース:SWIFTを使用して30項目のiOSアプリケーションを開発
Reference
この問題について(学習(SWIFT基本文法)-4), 我々は、より多くの情報をここで見つけました
https://velog.io/@tony1803/iOS-공부-Swift-기본-문법-4
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
let numbers = [0, 1, 2, 3]
let mapArray = numbers.map { (number) -> Int in
return number * 2
}
print("map \(mapArray)") // map [0, 2, 4, 6]
let intArray = [10, 5, 20, 13, 4]
let filterArray = intArray.filter { $0 > 5 } // 위에서 다룬 클로저 단순화 사용
print("filter \(filterArray)") // filter [10, 20, 13]
let someArray = [1, 2, 3, 4, 5]
let reduceResult = someArray.reduce(0) {
(result: Int, element: Int) -> Int in
print("\(result) + \(element)")
return result + element
} // 0은 초기값, result에는 누적값, element는 배열의 원소
print("reduce \(reduceResult)")
/*
0 + 1
1 + 2
3 + 3
6 + 4
10 + 5
reduce 15
*/
快速キャンパス、超差コース:SWIFTを使用して30項目のiOSアプリケーションを開発
Reference
この問題について(学習(SWIFT基本文法)-4), 我々は、より多くの情報をここで見つけました https://velog.io/@tony1803/iOS-공부-Swift-기본-문법-4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol