클래스 와 구조 체

3448 단어
가장 피곤 한 것 은 길 이 먼 것 이 아니 라 당신 의 마음 속 의 답답 함 입 니 다.가장 사람 을 퇴폐 시 키 는 것 은 왕왕 앞날 의 굴곡 이 아니 라 자신 감 의 상실 이다.가장 고 통 스 러 운 것 은 삶 의 불행 이 아니 라 당신 이 원 하 는 파멸 입 니 다.가장 절망 적 인 것 은 흔히 좌절 의 타격 이 아니 라 마음의 죽음 이다.
머리말
Swift 언어 는 클래스 와 구조 체 두 가지 데이터 구 조 를 동시에 지원 하 는데 클래스 는 대상 을 대상 으로 프로 그래 밍 하 는 데 매우 중요 한 개념 이 고 구조 체 는 C 언어 에서 남 겨 진 조합 데이터 구조 이다.한편, Swift 언어 에서 구조 체 의 기능 은 C 언어 에 비해 어느 정도 향상 되 었 기 때문에 Swift 언어 에서 이들 은 매우 비슷 하고 취사선택 하기 어렵다. 오늘 우 리 는 이들 의 공통점 과 실제 개발 에서 의 취사선택 문 제 를 밝 히 겠 다.
공통점
Swift 언어 에서 구조 체 와 클래스 는 모두 가능 합 니 다.
  • 방법, 속성 을 정의 할 수 있 습 니 다
  • 어떤 협 의 를 계승 하거나 실현 할 수 있다
  • 모두 자신의 초기 화 방법 이 있다
  • 아래 표 시 된 방문 문법
  • 을 지원 합 니 다.
  • 모두 확장 지원
  • 양자 의 정의 방식 은 같다.
    class A {
        var p1:String?
        var p2:String?
        
        func f() {
          print("      ")
        }
    }
    
    struct A1 {
        var p1:String?
        var p2:String?
        
        func f() {
            print("        ")
        }
    }
    

    차이 점
    비록 비슷 한 점 이 많 지만 유형 과 구조 체 는 아직도 많은 차이 점 이 있 습 니 다. 다음은 필자 가 당신 을 위해 일일이 말씀 드 리 겠 습 니 다!
  • 클래스 지원 상속
  • deInit () 방법 지원 (C + + 언어 에서 석조 함수 라 고 함) 자원 방출
  • 인용 계수 기 는 한 종류 에 대한 여러 번 인용 을 허용 합 니 다
  • class B1 {
        var x:Int?
        var y:Int?
        
        init() {
            print("     ,      ")
        }
        
        deinit {
            print("      ,       ")
        }
        
        func f() {
            print("B1->f()")
        }
    }
    
    class B2 : B1 {
        override func f() {
            print("B2->f()")
        }
    }
    
    let b1:B1 = B2()
    b1.f()
    
    struct B11 {
        var x:Int?
        var y:Int?
        
        init() {
            print("     ,      ")
        }
        
        //   deInit  
    //    deinit {
    //        
    //    }
    }
    
    //      
    //struct B12 : B11 {
    //
    //}
    

    위의 차이 점 을 제외 하고 류 와 구조 체 는 몇 가지 중요 한 차이 점 이 있다.
  • 컴 파 일 러 는 클래스 에 매개 변수 가 없 는 초기 화 방법 을 자동 으로 생 성하 고 구조 체 에 모든 속성 을 가 진 초기 화 방법
  • 을 생 성 합 니 다.
  • 구조 체 인 스 턴 스 는 값 유형 이 고 클래스 인 스 턴 스 는 인용 유형
  • //                
    class C1 {
        var a:String?
        var b:String?
    }
    
    struct C11 {
        var a:String?
        var b:String?
    }
    
    let c1:C1 = C1()
    c1.a = "a"
    let c11:C11 = C11(a: "a", b: "b")
    
    //         
    //   c2        c1  
    let c2:C1 = c1
    print("a=\(c1.a!)")
    c2.a = "aaa"
    print("a=\(c1.a!)")
    //          
    //   c22      c11  
    var c22:C11 = c11
    print("a=\(c11.a!)")
    c22.a = "aaa"
    print("a=\(c11.a!)")
    

    다음 에 우 리 는 표 한 장 으로 유형 과 구조 체 의 차 이 를 요약 한다.
    차이 점
    구조 체
    종류
    기본 초기 화 함수
    모든 인자 포함
    매개 변수 없 음
    인 스 턴 스 형식
    값 형식
    참조 형식
    이어받다
    지지 하지 않 음
    지지 하 다.
    어떻게 취사선택 합 니까?
    위의 분석 을 통 해 우 리 는 구조 체 가 디자인 에 있어 데이터 의 포장 에 더욱 치 우 친 다 는 것 을 알 수 있다.한편, 클래스 는 데이터 의 패 키 징 을 제외 하고 데이터 에 대한 처리 에 도 치 우 친다.클래스 와 구조 체 의 차이 점 에서 가장 중요 한 것 은 클래스 인 스 턴 스 는 인용 유형 이 고 구조 체 인 스 턴 스 는 값 유형 입 니 다. 데이터 전달 과정 에서 원 데이터 의 값 에 영향 을 주지 않 으 려 면 구조 체 를 고려 하 십시오. 만약 에 자체 가 같은 인 스 턴 스 를 조작 하 는 것 을 고려 하면 사용 류 를 고려 하 십시오.또 하나의 중요 한 점 은 구조 체 가 계승, 다 형 등 대상 을 대상 으로 하 는 특성 을 실현 하지 못 하기 때문에 확장 과 대상 을 대상 으로 하 는 특성 을 고려 하면 유형 도 사용 하 라 는 것 이다.
    요약 하면 데이터 에 대한 패 키 징 이 라면 구조 체 를 사용 하면 된다.실행 시의 특성 과 형식의 확장 을 고려 하면 클래스 를 사용 하 십시오.
    만약 당신 이 나의 이 글 을 좋아한다 면, 글 오른쪽 위의 추가 관심 사 를 클릭 하 세 요.더 많은 사람들 과 함께 Swift 언어 를 토론 하고 싶다 면, 나의 Swift 커 뮤 니 케 이 션 그룹 에 가입 하 세 요. 우 리 는 당신 을 기다 리 고 있 습 니 다.fork 라 는 글 의 원본 창고 도 환영 합 니 다.https://github.com/yuanhoujun/Swift.git。더 많은 의견 과 토론 은 글 아래 의 댓 글 에서 저 에 게 알려 주세요.

    좋은 웹페이지 즐겨찾기