Swift에서 변수 정의에 {}로 묶은 문법 3가지 모드를 사용해서 Gestart가 붕괴되었습니다
6227 단어 Swift
개시하다
기뻐하세요.
Swift는 지금까지 익숙하지만 변수 정의에서 {}문법을 사용하는 모델이 있는데 각각 다른 뜻을 나타낸다.그러나 "{}"으로 이러한 의미를 요약하면 혼란을 초래할 수 있습니다.저처럼요.
이벤트
변수 정의에서 {}을 사용하는 모델은 세 가지가 있는데 변수를 열거할 때 각자의 행동이 다른지 시험해 보세요.
// 一見すると全部同じようなことをしているように見えますが...
// foo, bar, bazの挙動の違いがわかりますでしょうか?
class Gestaltzerfall {
var foo: Node {
return Node(name: "foo")
}
let bar = {
return Node(name: "bar")
}()
let baz = {
return Node(name: "baz")
}
}
최대한 많은 사람에게 보여주려고 편파적인 코드를 썼어요.처음 듣거나 이상한 사람을 위해 여기서 같이 확인해 봅시다.변수 정의에서 문법을 사용하는 3가지 모델
변수
foo
,bar
,baz
는 각각 다음과 같은 행위를 정의했는데 어떠한가.알겠느냐?foo
- Computed properties 정의bar
- 즉시 함수(클론)의 반환값을 대입baz
- 클론 대입Computed properties 정의
// Computed properties
var foo: Node {
get {
return Node(name: "foo")
}
}
Computedproperties 자체는 get/set 등 읽기와 쓰기를 제어하는 특징을 가진 속성이다.테스트의 예에서 get의 기술을 생략한 것은 읽기만 하는 악의적인 기술입니다.만약 get이라고 명확하게 표시한다면, 나는 네가 Computedproperties로 이해할 것이라고 생각한다.변수에 접근할 때마다 get 처리를 실행합니다.
인스턴트 함수(클론)의 반환 값 입력
// 即時関数の返り値を代入
let bar: Node = {
return Node(name: "bar")
}()
저장되지 않은 복제자의 결과를 변수에 대입합니다.단지 함수의 반환값을 변수에 넣을 뿐이다.초기화할 때 기어오르기 내부 처리를 한 번 실행합니다.
의상실에 대입하다
// クロージャーを代入
let baz: () -> Node = {
() -> Node in
return Node(name: "baz")
}
저장할 클론 사용자를 변수에 저장합니다.호출할 때마다 클론이 실행됩니다.
각자 불러봐요.
// 初期化時にnameをprintするなにか
struct Node {
init(name: String) {
self.name = name
print(name)
}
let name: String
}
노드는foo
,bar
,baz
로 되돌아오는 값의 구조체이다.디버깅을 위해 초기화할 때 로그를 출력합니다.
let g = Gestaltzerfall()
// 呼ばれるたびにNodeを初期化
g.foo
g.foo
// クラスをインスタンス化したときにNodeが初期化
g.bar
g.bar
// 呼ばれるたびにNodeを初期化
g.baz()
g.baz()
되돌아오는 값을 무시하기 때문에 프로그램에서는 무의미한 설명이지만 초기화할 때 로그를 출력하기 때문에 디버깅 영역에서 행동을 확인할 수 있습니다.bar
foo
foo
baz
baz
반환값의 결과만 보면foo
과baz
의 행동은 같다.bar
클래스 실례화 시 한 번만 대입된다.끝말
체계적으로 공부하는 사람에게는 수수께끼 같은 현상으로 여겨질 수 있지만, 보고, 보고, 모방하면 자주 이렇게 한다
엉망진창이니까 잘못을 알면 알려주세요.
Reference
이 문제에 관하여(Swift에서 변수 정의에 {}로 묶은 문법 3가지 모드를 사용해서 Gestart가 붕괴되었습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/trueSuperior/items/5e14a83db1a03ffdd33d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)