【Swift】구조 및 클래스

Swift의 구조체와 클래스는 공통점이 많습니다.

 - 定义属性用于存储值
 - 定义方法用于提供功能
 - 定义下标操作使得可以通过下标语法来访问实例所包含的值
 - 定义构造器用于生成初始化值
 - 通过扩展以增加默认实现的功能
 - 实现协议以提供某种标准功能

구조체와 비교할 때 클래스에는 다음과 같은 추가 기능이 있습니다.

- 继承允许一个类继承另一个类的特征
- 类型转换允许在运行时检查和解释一个类实例的类型
- 析构器允许一个类实例释放任何其所被分配的资源
- 引用计数允许对一个类的多次引用

구조체와 열거형은 값 유형입니다.
값 유형이 변수, 상수에 지정되거나 함수에 전달되면 해당 값이 복사됩니다.

클래스는 참조 유형입니다
. 값 유형과 달리 참조 유형이 변수, 상수에 지정되거나 함수에 전달될 때 해당 값은 복사되지 않습니다. 따라서 참조는 복사본이 아니라 기존 인스턴스 자체에 대한 것입니다.

항등 연산자
클래스는 참조 유형이므로 여러 상수와 변수가 배후에서 동일한 클래스 인스턴스를 동시에 참조할 수 있습니다. (구조체와 열거형은 그렇지 않습니다. 값 유형이기 때문에 상수, 변수에 할당되거나 함수에 전달될 때 해당 값이 항상 복사됩니다.) 두 개의 상수 또는 변수가 동일한 클래스 인스턴스를 참조하는지 여부를 확인할 수 있으면 도움이 됩니다
. 이를 달성하기 위해 Swift에는 두 가지 기본 제공 ID 연산자가 있습니다.

• 等价于(===)
• 不等价于( !== )

클래스 및 구조 선택
코드에서 클래스 및 구조를 사용하여 사용자 정의 데이터 유형을 정의할 수 있습니다.
그러나 구조체 인스턴스는 항상 값으로 전달되고 클래스 인스턴스는 항상 참조로 전달됩니다. 이것은 두 가지가 서로 다른 작업에 적합하다는 것을 의미합니다. 엔지니어링 프로젝트의 데이터 구조 및 기능을 고려할 때 각 데이터 구조가 클래스 또는 구조로 정의되는지 여부를 결정해야 합니다.

일반적인 지침으로 다음 조건 중 하나 이상이 충족될 때 구조물 건설을 고려하십시오.

• 该数据结构的主要目的是用来封装少量相关简单数据值。
• 有理由预计该数据结构的实例在被赋值或传递时,封装的数据将会             被拷贝而不是被引用。 
• 该数据结构中储存的值类型属性,也应该被拷贝,而不是被引用。
• 该数据结构不需要去继承另一个既有类型的属性或者行为。

예를 들어 다음 상황은 구조체를 사용하는 데 적합합니다.
• 폭 속성과 높이 속성을 캡슐화하는 기하학적 도형의 크기, 둘 다 Double 유형입니다.
• Int 유형인 시작 속성과 길이 속성을 캡슐화하는 특정 범위 내의 경로.
• 모두 Double 유형인 x, y 및 z 특성을 캡슐화하는 3차원 좌표계의 점입니다.
다른 모든 경우에는 클래스가 정의되고 인스턴스가 생성되고 관리되며 참조로 전달됩니다. 실제로 이는 대부분의 사용자 지정 데이터 구성이 구조체가 아니라 클래스여야 함을 의미합니다.

Swift에서는 String, Array 및 Dictionary와 같은 많은 기본 유형이 구조로 구현됩니다. 즉, 새로운 상수나 변수에 할당되거나 함수나 메서드에 전달될 때 해당 값이 복사됩니다.

Objective-C에서 차이점은 NSString, NSArray 및 NSDictionary 유형이 구조체 대신 클래스 형태로 구현된다는 것입니다. 함수나 메서드에 할당되거나 전달될 때 값 복사는 발생하지 않지만 기존 인스턴스에 대한 참조가 전달됩니다.

Supongo que te gusta

Origin blog.csdn.net/sinat_15735647/article/details/78712706
Recomendado
Clasificación