10. assert, guard, 프로토콜
assert
특정 조건을 체크하고, 조건이 성립되지 않으면 메시지를 출력하게 할 수 있는 함수로, 디버깅 모드에서만 동작
var value = 0
assert(value == 0)
value = 2
assert(value == 0, "값이 0이 아닙니다")
// __lldb_expr_527/example.playground:7: Assertion failed: 값이 0이 아닙니다
// Playground execution failed:
// error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION...
guard
무엇인가를 검사하여 그 다음에 오는 코드를 실행할지 말지 결정하는 것으로, guard
문에 주어진 조건문이 거짓일 때 else
구문의 내용이 실행되도록 하되, return
이나 throw
, 혹은 break
구문을 사용하여 이후 코드가 실행되지 않도록 한다.
func guardTest(value: Int) {
guard value == 0 else { return }
print("안녕하세요")
}
guardTest(value: 2)
// guard문의 조건(value == 0)을 만족하지 않았으므로 아무것도 출력되지 않고 그냥 return
guardTest(value: 0)
// "안녕하세요"
guard문을 활용한 옵셔널 바인딩
func guardTest(value: Int?) {
guard let value = value else { return }
print(value)
}
guardTest(value: 2)
// 2
guardTest(value: nil)
// (guard문의 조건(상수에 대입가능한 값일 것)을 만족하지 않았으므로 아무것도 출력되지 않고 그냥 return
프로토콜
특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진
protocol SomeProtocol {}
protocol SomeProtocol2 {}
struct SomeStructure: SomeProtocol, SomeProtocol2 {}
class SomeClass: SomeSuperClass, SomeProtocol, SomeProtocol2 {}
프로퍼티 요구사항 준수를 요구하는 방법
요구사항 준수를 이행시킬 프로퍼티에 대해서는 반드시
var
키워드에 타입을 명시- 특히, 프로퍼티의 타입을 반드시 준수시켜야 할 경우,
var
키워드 앞에static
키워드를 명시 - 읽기/수정의 가능여부에 맞춰서
get
과set
을 명시
해야 한다.
protocol FirstProtocol {
var name: Int { get set }
var age: Int { get }
}
protocol AnotherProtocol {
static var someTypeProperty: Int { get set }
}
구조체에 프로퍼티와 메서드 이행이 포함된 프로토콜을 제시해보기
protocol FirstProtocol {
var name: Int { get set }
var age: Int { get }
}
protocol AnotherProtocol {
static var someTypeProperty: Int { get set }
}
protocol FullyNames {
var fullName: String { get set }
func printFullName()
}
struct Person: FullyNames {
var fullName: String
func printFullName() {
print(fullName)
}
}
클래스에 초기화 이행이 포함된 프로토콜을 제시해보기
final
키워드를 통해 식별되었다면 모를까, 그렇지 않다면, 일반적으로 클래스에서의 initializer 프로토콜 이행을 위해서는 반드시 required:
키워드가 필요하다.
protocol SomeProtocol3 {
func someTypeMethod()
}
protocol SomeProtocol4 {
init(someParameter: Int)
}
protocol SomeProtocol5 {
init()
}
class SomeClass: SomeProtocol5 {
required: init() {}
}
Author And Source
이 문제에 관하여(10. assert, guard, 프로토콜), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lattepapa/10.-assert-guard-프로토콜저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)