Structure
struct StructName {
property
method
initalizer
subscript
}
struct Person {
var name : String
var age : Int
func speak() {
print("Hello")
}
}
let p = Person(name : "Steve", age : 50)
p.name // Steve
p.age // 50
p.speak() // Hello
Class
class ClassName {
property
method
initalizer
deinitializer
subscript
}
class Person {
var name = "John Doe"
var age = 0
func speak()
print("Hello")
}
}
let p = Person()
p.name // John Doe
p.age // 0
p.speak() // Hello
Initializer Syntax
생성자는 속성 초기화가 가장 중요하고 유일한 목적, 생성자 실행이 종료되는 시점에는 모든 속성에 초기값이 저장되어있어야 함
열겨형, 구조체, 클래스는 모두 설계도, 설계도에 따라서 인스턴스를 만들기 위해서는 초기화 과정이 반드시 필요, 생성자를 호출하면 초기화가 시작되고, 생성자 실행이 완료되면 모든 속성이 초기화됨, 에러 없이 초기화가 완료되면 인스턴스 생성
init(parameters) {
statements
}
class Position {
var x : Double
var y : Double
init() {
x = 0.0
y = 0.0
}
init(value : Double) {
x = value
y = value
}
}
let a = Position()
a.x // 0
a.y // 0
let a = Position(value : 100)
a.x // 100
a.y // 100
Value Types and Reference Types
Value Types | Reference Types |
구조체(기본자료형), 열거형, 튜플, swift collection | 클래스, 클로져 |
복사본 전달 | 메모리 주소 전달 |
상대적으로 적은 데이터 전달, 상속이 불필요한 경우 값이 전달될때 마다 복사본이 생성되어야하는 경우 연관된 상수 그룹을 표현할 경우 열거형 코드내에서 한번만 사용되는 형식은 튜플 나머지 값 형식은 구조체 |
나머지 대부분 클래스 구현 |
값 형식이 저장되는 메모리 공간 = stack | 값을 heap에 저장, 메모리주소를 stack에 저장 (2곳에 저장) |
// 속성은 생성과 동시에 기본값 저장중 -> 파라미터가 없는 생성자가 자동으로 제공 -> 기본생성자
struct PositionValue {
var x = 0.0
var y = 0.0
}
class PositionObject {
var x = 0.0
var y = 0.0
}
var v = PositionValue()
// x = 0, y = 0
var o = PositionObject()
// x = 0, y = 0
var v2 = v
// x = 0, y = 0
var o2 = o
// x = 0, y = 0
v2.x =12
v2.y = 34
v
// x = 0, y = 0
v2
// x = 12, y = 34
o2.x =12
o2.y = 34
o
// x = 12, y = 34
o2
// x = 12, y = 34
Identity Operator
인스턴스의 주소를 비교
같은 메모리 주소가 같다면 Identiacl 이 같다고 표현하고 값이 같다면 Equal로 표현
classInstance === classInstance // Identical to Operator
classInstance !== classInstance // Not Identical to Operator
class A {
}
let a = A()
let b = a
let c = A()
a === b // true
a !== b // false
a !== c // true
Nested Types
String.CompareOptions
class One {
struct Two {
enum Three {
case a
class Four {
}
}
}
var a = Two() // = One.Two() class One 내부에 있기 때문에 One 생략 가능
}
let two : One.Two = One.Two()
'스피드 문법정리' 카테고리의 다른 글
16. Method and Subscript (0) | 2020.06.19 |
---|---|
15. Property (0) | 2020.06.18 |
13. Enumeration (0) | 2020.06.17 |
12. Collection (0) | 2020.06.16 |
9. Functions (0) | 2020.06.15 |