클래스 와 구조 체
머리말
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(" ")
}
}
차이 점
비록 비슷 한 점 이 많 지만 유형 과 구조 체 는 아직도 많은 차이 점 이 있 습 니 다. 다음은 필자 가 당신 을 위해 일일이 말씀 드 리 겠 습 니 다!
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。더 많은 의견 과 토론 은 글 아래 의 댓 글 에서 저 에 게 알려 주세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.