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
    
    반환값의 결과만 보면foobaz의 행동은 같다.bar 클래스 실례화 시 한 번만 대입된다.

    끝말


    체계적으로 공부하는 사람에게는 수수께끼 같은 현상으로 여겨질 수 있지만, 보고, 보고, 모방하면 자주 이렇게 한다
    엉망진창이니까 잘못을 알면 알려주세요.

    좋은 웹페이지 즐겨찾기