02.SWIFTの基礎
UdemyでiOSアプリケーション開発講座を聴いていますが、記録を残すために公式ファイルを読んでいます(docs.swift.org).以下はSWIFTベースについて注目すべきものです.
Type Annotations
定数または変数宣言では、代入可能なデータ型を予め指定できます.もちろん,あらかじめデータ型が定められていなくても,SWIFT言語はその変数のデータ型を自動的に推定する.
他のプログラミング言語とは異なり、swiftは文の末尾にセミコロン(;)必ずしも使う必要はありません.しかし、複数の文を1行に書くには、セミコロンで区切らなければなりません.
インテルのデータ型は、C言語のインテルのデータ型とほぼ同じです.これに加えて、SWIFTは8ビットの暗号化されていないIntegerで
SWIFTは、データ型に対してAliasを指定することができる.
Tuplesは、複数の値を組み合わせた機能を実行します.この場合、1つのインスタンスを1つのデータ型に統一する必要はありません.例えば、HTTPステータスコードの
このHTTP状態コードは「
Optional & nil
データ型の条件に一致する値があるかどうか不明な場合は、「オプション」を使用します.これはC言語やObjective-C言語には存在しない概念である.少なくともObjective-C言語では、
代表的な例は、String"123"をInt 123に変換することである.Int 123が明示的に宣言されていない場所に導入された場合、SWIFTはこの機能を保持します.
「Integerのように見えますが、正確ではないかもしれません」
というニュアンスで、このデータ型がゆったりしていると推定します.もちろん、String「abc」をIntに変換しようとすると、このような推定は行われません.
if文は、optionalが
optionalに値が含まれていると確信している場合は、optional名の末尾に感嘆符(
オプションバインド(Optional Binding)オプションに値が含まれているかどうかを確認し、値がある場合は一時定数または変数として使用できます.このためには、Forced Unwrappingメソッドの1つであるif文を使用します.
番犬を作るためには、タイプの後ろに疑問符(
暗黙的な梱包解除は、最初に定義した後、値が存在することが確認され、その後のすべての時点で非常に役立ちます.これらの暗黙的なパッケージ解除のオプションは、主にクラスの初期化に使用されます.
暗黙的に包装を解除する外観は内部外観ですが、外観に近づくたびに外観の値を外す必要がなく、外観の値ではなく外観の値を使用するように使用できます.
逆に、次のコードでは、
Error Handling
SWIFTはcatchセクションとthrowsキーワードを使用してエラー処理を行います.特に、エラーが発生する可能性のある関数を呼び出す場合は、式の前にtryキーを付けます.
「サポート」と「前提」の使用は、無効な条件が発生しないようにするために開発されました.Assertionはデバッグバージョンでのみチェックされます.代わりに、Preconditionはデバッグと本番バージョンでチェックされます.すなわち,生産構築時にAssertion内部の条件を実行しない.
Debugging with Assertions
SWIFT標準ライブラリの
assert文と同様に、swift標準ライブラリの
Type Annotations
定数または変数宣言では、代入可能なデータ型を予め指定できます.もちろん,あらかじめデータ型が定められていなくても,SWIFT言語はその変数のデータ型を自動的に推定する.
// variable에 데이터 타입을 직접 명시하는 경우
var welcomeMessage: String
welcomeMessage = "Hello"
print(welcomeMessage) // Hello
// variables에 데이터 타입을 직접 명시하는 경우
var red, green, blue: Double
green = 323333333333333312
print(green) // 3.233333333333333e+17
// constant 이름을 emoji로 선언하면서 value를 대입하는 경우
let 📱 = "iPhone"
print(📱) // iPhone
Semicolons他のプログラミング言語とは異なり、swiftは文の末尾にセミコロン(;)必ずしも使う必要はありません.しかし、複数の文を1行に書くには、セミコロンで区切らなければなりません.
let cat = "🐱"; print(cat) // 🐱
Integersインテルのデータ型は、C言語のインテルのデータ型とほぼ同じです.これに加えて、SWIFTは8ビットの暗号化されていないIntegerで
UInt8
というデータ型を表すこともでき、UInt8
にはmin
とmax
の属性があり、Int型の最大/最小値を直接導出することができる.この場合、UInt8
のように、範囲が予め定められたデータ型は、その範囲内の値のみに代入されなければならない.// UInt8의 최대값과 최소값
let minValue = UInt8.min, maxValue = UInt8.max
print(minValue) // 0
print(maxValue) // 255
// UInt8의 최소값, Int8의 최대값
let cannotBeNegative: UInt8 = -1 // error
let tooBig: Int8 = Int8.max + 1 // error
一方、Intタイプは、Double()
関数を使用してFloating-Point(すなわち、小数点を有するデータ型)に簡単に変更できます.let three = 3, point = 0.14159
let pi = Double(three) + point
print(pi) // 3.14159
Type AliasesSWIFTは、データ型に対してAliasを指定することができる.
typealias sample = UInt16
var num = sample.min
print(num) // 0
Tuples 🖇Tuplesは、複数の値を組み合わせた機能を実行します.この場合、1つのインスタンスを1つのデータ型に統一する必要はありません.例えば、HTTPステータスコードの
(404, "Not Found")
は、非常に代表的なtupleの例と言える.このHTTP状態コードは「
(Int, String)
型のtuple」と言え,割当て(分解)を分解することで個々の値にアクセスできる.割り当てたくない値がある場合は、下線()でtupleから除外できます.// Tuple 선언
let httpError = (404, "Not Found")
// 분해할당을 통해 Tuple 내 value들을 세부 선언
let (code, msg) = httpError
print("The status code is \"\(code)\"")
// The status code is "404"
print("The status code is \"\(httpError.0)\"")
// The status code is "404"
print("The status message is \"\(msg)\"")
// The status message is "Not Found"
print("The status message is \"\(httpError.1)\"")
// The status message is "Not Found"
// Tuple 안에서 상태 메시지 value를 underscore로 배제
let (onlyThis, _) = httpError
print("The status code is \"\(onlyThis)\"")
// The status code is "404"
一方、tupleの各値についてはdictionaryのように最初からkey: value
と宣言してもよい.このようにtupleが宣言されると、key
はそのtupleの属性(attributite)となるので、Tuple.key
と同じ形式で値を呼び出すことができる.// 분해할당 하지 않고 Tuple 선언
let httpOk = (code: 200, msg: "OK")
print("The status code is \"\(httpOk.code)\"")
// The status code is "200"
print("The status code is \"\(httpOk.0)\"")
// The status code is "200"
print("The status message is \"\(httpOk.msg)\"")
// The status message is "OK"
print("The status message is \"\(httpOk.1)\"")
// The status message is "OK"
Optionals 🤡Optional & nil
データ型の条件に一致する値があるかどうか不明な場合は、「オプション」を使用します.これはC言語やObjective-C言語には存在しない概念である.少なくともObjective-C言語では、
nil
が返される場合がコンテキストに最も似ています.(換言すれば、SWIFTの傍観者は、Objective-Cのnil
に対応するために導出された機能である可能性がある)😎)代表的な例は、String"123"をInt 123に変換することである.Int 123が明示的に宣言されていない場所に導入された場合、SWIFTはこの機能を保持します.
「Integerのように見えますが、正確ではないかもしれません」
というニュアンスで、このデータ型がゆったりしていると推定します.もちろん、String「abc」をIntに変換しようとすると、このような推定は行われません.
let possible = "123"
// Swift가 알아서 Optional하게 데이터 타입을 추론
let converted1 = Int(possible)
print(converted1) // Optional(123)
// 처음부터 Optional한 데이터 타입이라고 선언
let converted2: Int? = Int(possible)
print(converted2) // Optional(123)
さらに,この原理を用いて,nil
を汎用データ型として宣言された変数に代入することもできる.もちろん、非データ型の変数には、nil
を代入することはできません.古いデータ型として宣言され、値が割り当てられていない場合、変数の値は自動的にnil
になります.// Optional한 데이터 타입의 default value
var optionalThing: String?
print(optionalThing) // nil
// Optional한 데이터 타입에 nil 대입
var ambiguous: Int? = 404
print(ambiguous) // Optional(404)
ambiguous = nil
print(ambiguous) // nil
If Statements and Forced Unwrappingif文は、optionalが
nil
と比較され、optionalに値が含まれているかどうかを決定する.外来診療部に値がある場合、nil
に等しくないと見なされる.optionalに値が含まれていると確信している場合は、optional名の末尾に感嘆符(
!
)を追加して値にアクセスできます.これがいわゆる外部値強制分解(強制展開)である.if notAmbiguous != nil {
print("notAmbiguous has definite value of \(notAmbiguous!).")
}
Optional Bindingオプションバインド(Optional Binding)オプションに値が含まれているかどうかを確認し、値がある場合は一時定数または変数として使用できます.このためには、Forced Unwrappingメソッドの1つであるif文を使用します.
if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
if let firstNumber = Int("4") {
if let secondNumber = Int("42") {
if firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
}
}
Implicitly Unwrapped Optionals番犬を作るためには、タイプの後ろに疑問符(
String?
)を書くよりも、感嘆符(String!
)で暗黙的に包装をキャンセルした番犬を書くほうがいい.傍観者を使用する場合、名前の後ろに感嘆符を置くよりも、傍観者を宣言するときにタイプの後ろに感嘆符を置くほうがいい.暗黙的な梱包解除は、最初に定義した後、値が存在することが確認され、その後のすべての時点で非常に役立ちます.これらの暗黙的なパッケージ解除のオプションは、主にクラスの初期化に使用されます.
暗黙的に包装を解除する外観は内部外観ですが、外観に近づくたびに外観の値を外す必要がなく、外観の値ではなく外観の値を使用するように使用できます.
let possibleString: String? = "An optional string."
let forcedString: String = possibleString!
// requires an exclamation point
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString
// no need for an exclamation point
上記のコードでは、assumedString
はStringタイプであり、implicitString
ではないので、implicitString
に値を割り当てる前に、強制的にパッケージをキャンセルされます.逆に、次のコードでは、
optionalString
は明確なタイプがないため、基本的にはオープンである.let optionalString = assumedString
// The type of optionalString is "String?" and assumedString isn't force-unwrapped.
暗黙的にキャンセルされたパッケージの外観はnil
で、パッケージの値に近づこうとすると、値のない外観の後ろに感嘆符が置かれているように動作時エラーが発生します.Error Handling
SWIFTはcatchセクションとthrowsキーワードを使用してエラー処理を行います.特に、エラーが発生する可能性のある関数を呼び出す場合は、式の前にtryキーを付けます.
func makeASandwich() throws {
// this function may or may not throw an error
}
do {
try makeASandwich()
eatASandwich()
} catch SandwichError.outOfCleanDishes {
washDishes()
} catch SandwichError.missSalt(let salt) {
goMarket(salt)
}
Assertions & Preconditions「サポート」と「前提」の使用は、無効な条件が発生しないようにするために開発されました.Assertionはデバッグバージョンでのみチェックされます.代わりに、Preconditionはデバッグと本番バージョンでチェックされます.すなわち,生産構築時にAssertion内部の条件を実行しない.
Debugging with Assertions
SWIFT標準ライブラリの
assert(_:_:file:line:)
を使用してAssertionを作成します.通常、true/falseと判断された式とfalseであれば、その「」セクションに出力するメッセージが順次書き込まれます.// assert 사용
let age = -3
assert(age >= 0, "A person's age can't be less than zero")
// assertionFailure 사용
if age > 19 {
print("You can ride a car")
} else if age >= 0 {
print("You are a human")
} else {
assertionFailure("A person's age can't be less than zero")
}
Enforcing Preconditionsassert文と同様に、swift標準ライブラリの
precondition(_:_:file:line:)
を使用してPreconditionを作成できます.使用法はassert文と同じです.通常、preconditionは、各条件が真であるかどうかを決定するために使用される.Reference
この問題について(02.SWIFTの基礎), 我々は、より多くの情報をここで見つけました https://velog.io/@lattepapa/02.-Swift의-기초テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol