swift 따위와 구조체
다른 프로그래밍 언어와 달리 Swift는 클래스와 구조를 정의하기 위해 단독 인터페이스를 만들고 프로젝트를 실현하도록 요구하지 않습니다.당신이 해야 할 일은 단일 부품에서 클래스나 구조체를 정의하는 것입니다. 시스템은 다른 코드의 외부로 연결됩니다.
1. 유형과 구조체의 대비
1. Swift에서 클래스와 구조체는 공통점이 많다.공통점은 다음과 같다. (1) 속성 정의는 저장 값에 있고 (2) 정의는 제공 기능에 대한 정의(3) 부속 스크립트는 접근 값에 대한 정의(4) 정의 구조기는 초기화 값에 대한 정의(5) 확장을 통해 기본적으로 구현된 기능을 추가한다(6) 프로토콜을 실현하여 특정한 표준 기능을 제공한다.
구조체와 비교하면 클래스는 다음과 같은 추가 기능이 있다. (1) 계승은 클래스가 다른 클래스의 특징을 계승할 수 있도록 허용한다.
(2) 유형 변환은 클래스를 운반할 때 클래스 실례를 검사하고 해석할 수 있도록 합니다 (3) 해체기는 클래스 실례가 분배된 자원을 방출할 수 있도록 합니다 (4) 인덱스 계수는 클래스에 대한 여러 번의 인덱스를 허용합니다
주의: 구조체는 항상 복사된 ⽅式을 통해 코드에 전달되기 때문에 ? 계수를 인용하지 마십시오.
2. 정의:
클래스는 키워드class, 구조체는 키워드struct 사용
class SomeClass {
// class definition goes here
}
struct SomeStructure {
// structure definition goes here
}
주의: 새로운 종류나 구조체를 정의할 때마다 실제적으로 새로운 Swift 유형을 효과적으로 정의합니다.따라서 표준 Swift 유형의 쓰기 명명(예를 들어 String, Int 및 Bool)에 부합하도록 [Upper Camel Case]와 같은 [amp]ldquo;식으로 이름을 지정하십시오.반대로, 클래스와 구분하기 위해, 'lower Camel Case' 와 같은 '속성 및' 법 이름 (예:framerate와increment Count) 을 지정하십시오.
이것은 공식적인 건의이지만, 만약 네가 굳이 소문자, 속성, 방법을 굳이 대문자로 쓰려고 한다면, 그것도 틀리지 않을 것이다
다음은 클래스와 구조체를 정의합니다.
4
class PersonClass {
var name : String = ""
var age : Int = 0
var sex : String?
}
struct Dog {
var master = PersonClass()
var dogName = ""
}
키워드가 다른 것 외에는 별 차이가 없다3. 클래스와 구조체 실례(통상적인 클래스의 실례를 클래스 대상이라고 부른다)
클래스PersonClass는 특정한 유형의 사람들의 공통된 속성을 묘사하는 것으로 어느 사람에게까지 구체화되지 않았기 때문에 특정한 사람을 구체적으로 묘사하는 실례가 필요하다. 구조체도 마찬가지다. 다음은 실례를 생성하는 문법이다.
class PersonClass {
var name : String = ""
var age : Int = 0
var sex : String?
}
struct Dog {
var master = PersonClass()
var dogName = ""
}
let onePerson = PersonClass()
let oneDog = Dog()
4. 속성 접근:
점 구문(dot syntax)을 사용하여 인스턴스에 포함된 속성에 액세스할 수 있습니다.그 문법 규칙은 실례명 뒤에 속성명을 따르고 둘은 점호(.)를 통과한다.잇닿다
4
struct Mouse {
var brand = "apple"
var price = 999.0
}
class Computer {
var mouse = Mouse()
var display = "dell"
var keyboard = "lenovo"
var mainframe = "asus"
var price = 9999.0
}
var oneMouse = Mouse()
var oneComputer = Computer()
print("the mouse brand is \(oneMouse.brand), the computer display is \(oneComputer.display)")
print("the mouse's price of the computer is \(oneComputer.mouse.price)")
oneComputer.mouse.price = 888.0
print("the mouse's price of the computer is \(oneComputer.mouse.price)")
// : Objective-C ,Swift 。
// , oneComputer oneMouse price
// , oneMouse 。
//the mouse brand is apple, the computer display is dell
//the mouse's price of the computer is 999.0
//the mouse's price of the computer is 888.0
5. 구조체 유형의 구성원 구조기모든 구조체는 하나의 구성원이 있고 새로운 구조체의 실례에서 구성원의 속성을 초기화한다.새 인스턴스의 각 속성에 대한 초기 값은 속성 이름을 통해 구성원 구조자에게 전달될 수 있습니다.
4
var twoMouse = Mouse(brand: "lenovo", price: 500.0)
print("the mouse's brand is \(twoMouse.brand), and the price is \(twoMouse.price)")
//the mouse's brand is lenovo, and the price is 500.0
구조체와 달리 클래스 실례에 기본적인 구성원 구조기가 없다.2. 구조체와 매거는 값 유형이다
값 유형이 변수, 상수 또는 이 함수에 부여되었을 때 실제적으로 그 값의 복사를 조작한다
Swift에서 모든 기본 유형: 정수(Integer), 부동점수(floating-point), 부울값(Boolean), 문자열(string), 수조(array)와 사전(dictionary)은 모두 값 유형이고 구조체의 형식으로 백엔드에서 실현된다.
Swift에서는 모든 구조체 및 열거 유형이 값 유형입니다.이것은 그것들의 실례와 실례에 포함된 모든 값 유형의 속성이 코드에서 전달될 때 복제된다는 것을 의미한다
4
var twoMouse = Mouse(brand: "lenovo", price: 500.0)
print("the mouse's brand is \(twoMouse.brand), and the price is \(twoMouse.price)")
//the mouse's brand is lenovo, and the price is 500.0
var threeMouse = twoMouse
threeMouse.price = 555.0
print("twoMouse price is \(twoMouse.price)")
print("threeMouse price is \(threeMouse.price)")
//twoMouse price is 500.0
//threeMouse price is 555.0
상기 예에서 two Mouse를three Mouse에 부여한 것은 사실은 two Mouse를 three Mouse에 복사한 것을 말한다. three Mouse의 값을 수정하면 two Mouse의 값은 영향을 받지 않는다.3. 유형은 인용 유형
4.47913. 값 유형과 달리 인용 유형은 인용 변수, 상수 또는 인용 함수에 부여되거나 전달될 때 인용 함수를 조작하는데 이것은 고문이 아니다.따라서 이미 존재하는 실례본은 복사본이 아니기 때문에 위에서 컴퓨터2의 price 속성을 조작할 때 컴퓨터1의 price 속성 값도 바뀌었다. 사실 컴퓨터1과 컴퓨터2는 같은 대상을 가리키고 그들이 조종하는 것도 같은 대상이다. 이것이 바로 인용이다.
값 유형 및 참조 유형 분석은 다음과 같습니다.
1. 항등 연산자
클래스는 인덱스 유형이기 때문에 여러 개의 상수와 변수가 백그라운드에서 한 클래스를 동시에 인덱스할 수 있다.구조체와 열거에 있어서 이것은 결코 일치하지 않는다. 왜냐하면 이것은 값 유형으로서 상수, 변수, 함수에 부여되거나 전달될 때 항상 그 값이 복사되기 때문이다.만약 두 개의 상수나 변수가 같은 종류의 실례를 인용하는지 여부를 판정할 수 있다면 매우 도움이 될 것이다.이 목적을 달성하기 위해 Swift 안에 두 개의 항등 연산자를 세웠다. 등가는 (===) 등가이고 (!==) 등가는 아니다.
"등가"(\세 등호 표\, ====) 와 "등가"(\두 등호 표\======) 의 차이는 다음과 같다. "등가\"두 종류 유형 (class type) 의 상수나 변수는\두 종류와 같은 실례를 인용한다."같음"표는 두 실례의 값이 "같음"또는 "같음"으로 판정할 때 클래스 디자이너가 정의한 판정 기준을 따라야 하기 때문에 "같음"과 같음은 더욱 적합한 명칭이다.
var computer1 = Computer()
print("the computer1's price is \(computer1.price)")
var computer2 = computer1
computer2.price = 1000000.0
print("the computer2's price is \(computer2.price)")
print("the computer1's price is \(computer1.price)")
//the computer1's price is 9999.0
//the computer2's price is 1000000.0
//the computer1's price is 1000000.0
2. 지침
C, C++ 또는 Objective-C 언어에서 메모리의 주소를 끌어옵니다.Swift 상수 또는 변수 인덱스 유형의 인스턴스는 C어 포인터와 유사하며 메모리의 주소를 직접 가리키지 않으며 별표 (*) 로 인덱스를 만드는 것을 요구하지 않습니다.Swift에서 이러한 인덱스는 다른 상수나 변수의 정의와 같다.
4. 유형과 구조체의 선택
언제 종류를 사용하고, 언제 구조체를 사용합니까?
통폐의 준칙에 따라 통폐조 또는 여러 개 아래의 조건에 부합할 때 구조체 구축을 고려하십시오. 구조체의 주요 통폐는 소량의 관련 간단한 데이터 값을 봉인하는 것입니다.구조체 실례가 값을 부여하거나 전달할 때 봉인된 데이터는 복사되지 않을 것으로 예상되는 이유가 있습니다.구조체에 저장된 모든 값 형식 속성도 복사됩니다. 인용되지 않습니다.구조체는 이미 존재하는 다른 유형의 속성이나
5. 문자열(String), 배열(Array), 사전(Dictionary) 유형의 값 부여 및 복사
Swift에서 문자열(String), 배열(Array) 및 사전(Dictionary) 유형은 구조체로 구성됩니다.이것은 String, Array, Dictionary 유형의 데이터가 새로운 상수나 변수에 값을 부여받거나 함수나 법에 전달될 때 값을 복사한다는 것을 의미한다.
Objective-C에서 문자열(NSString), 배열(NSArray)과 사전(NSDictionary) 유형은 모두 클래스로 이루어지는데 이것은 Swfit에서 값으로 전달하는 방식과 다르다.NSString, NSArray, NSDictionary는 값을 부여하거나 함수(또는 함수)를 전달할 때 값을 복사하지 않습니다. ⽽는 이미 존재하는 실례를 전달하는 인덱스입니다.
사실 말하자면 값 유형이 무엇인지, 인용 유형이 무엇인지 이해하기만 하면 위의 것들은 모두 이해하기 쉽다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Babel6 계에서 extends 한 클래스에 instanceof를 사용하는 방법확인한 버전 babel-core v6.26.0 babel-plugin-transform-builtin-extend v1.1.2 원인 영어가 좋지 않으므로 자세히 읽을 수는 없지만 6 계열의 버그처럼 보입니다. 1.p...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.