struct 구조체 이름 {
프로퍼티와 메소드 = 멤버
}
// 구조체: 파스칼로 정의
struct User {
var nickname: String
var age: Int
// 메소드 정의
func information() {
print("\(nickname) \(age)")
}
}
var user = User(nickname:"fall", age:23)
user.nickname.
// 메소드 호출
user.information()
class 클래스 이름 {
프로퍼티와 메소드
}
class Dog {
var name: String = ""
var age: Int = 0
// 생성자 초기화(뒤에 정리)
init() {
}
// 메소드 정의
func information() {
print("\(name) \(age)")
}
}
var dog = Dog()
dog.name = "fall"
// 메소드 호출
dog.information()
init(매개변수: 타입, ...) {
// 프로퍼티 초기화
// 인스턴스 생성시 필요한 설정을 해주는 코드 작성
}
class Dog {
var name: String = ""
var age: Int = 0
// 생성자 초기화 ex) dog
init(name: String, age: Int) {
self.name = name
self.age = age
}
// ex) dog2
// 매개변수로 전달받지 않고 생성자 안에서 프로퍼티를 전달하여 초기화
//기본 제공되는 생성자 외에 사용자 정의 생성자를 이용해 생성자 정의
init(age: Int) {
self.name = "fall"
self.age = age
}
// ex3) dog3
//이니셜라이저와 반대 디이니셜라이저(deinit - class에서만) > 인스턴스가 메모리에 해제되기 직전에 호출
// 인스턴스가 필요하지 않으면 자동으로 메모리에서 소멸을 시키기 때문에 deinit이 호출
deinit {
print("deinit user")
}
}
var dog = Dog(name: "fall", age: 23)
dog.name
dog.age
var dog2 = Dog(age: 27)
dog2.name
dog2.age
var dog3: Dog? = Dog(age:23)
dog3 = nil
struct Dog {
// 저장 프로퍼티
var name: String
let gender: String
}
var dog = Dog(name: "fall", gender: "female")
print(dog) //Dog(name: "fall", gender: "female") 프로퍼티에 값이 저장되는 것 = 저장 프로퍼티
dog.name = "mayo"
//dog.gender = "male" // 상수로 선언된 프로퍼티는 값을 변경할 수 없다.
let dog2 = Dog(name: "mayo", gender: "male")
//dog2.name="nez"
// 구조체 인스턴스가 상수로 선언되었기 때문에 값을 변경할 수 없다.
// 구조체는 {value, 값} 타입 > 상수가 되면 내부 프로퍼티도 다 상수가 된다.
class Cat {
var name: String
let gender: String
init(name: String, gender: String) {
self.name = name
self.gender = gender
}
}
let cat = Cat(name: "mayo", gender: "male")
cat.name = "nez"
print(cat.name) //nez
// 상수로 선언해도 프로퍼티의 값이 변경된다.
// 프로퍼티 옵저버
class Account {
var credit: Int = 0 {
// 값이 저장되기 직전에 호출
// 새로 저장될 프로퍼티의 값을 상수 매개변수(지정하지 않으면 newValue)로 전달
willSet {
print("잔액이 \(credit)원에서 \(newValue)원으로 변경될 예정입니다.")
}
// 값이 저장된 직후에 호출
// 프로퍼티의 기존값이 상수 매개변수(지정하지 않으면 oldValue)로 전달
didSet {
print("잔액이 \(oldValue)원에서 \(credit)원으로 변경되었습니다.")
}
}
}
var account = Account()
account.credit=1000
struct Stock {
var price: Int
var amount: Int
// 연산형 프로퍼티
var purchasePrice: Int {
// 값을 연산
get {
return price * amount
}
// 프로퍼티에 전달
set(newPrice) {
price = newPrice / amount
}
}
}
var stock = Stock(price: 2300, amount: 3)
print(stock) //Stock(price: 2300, amount: 3)
stock.purchasePrice //6900
stock.purchasePrice = 3000
stock.price //1000
struct SomeStructure {
// 타입 프로퍼티
static var storedTypeProperty = "some value"
static var computedTypeProperty: Int {
return 1
}
}
SomeStructure.computedTypeProperty
SomeStructure.storedTypeProperty
class SomeClass {
var count: Int = 0
}
var class1 = SomeClass()
var class2 = class1
var class3 = class1
class3.count = 2
class1.count // 2
struct SomeStruct {
var count: Int = 0
}
var struct1 = SomeStruct()
var struct2 = struct1
var struct3 = struct1
struct2.count = 3
struct3.count = 4
struct1.count // 0
struct2.count // 3
struct3.count // 4
패스트캠퍼스 ios 앱개발 swift 강의를 듣고 작성된 글입니다.