정의 

구조체와 클래스의 정의 구문은 비슷합니다. struct키워드로 구조를 소개하고 키워드로 클래스를 소개합니다 class. 둘 다 한 쌍의 중괄호 안에 전체 정의를 배치합니다.

struct SomeStructure {
    // structure definition goes here
}
class SomeClass {
    // class definition goes here
}

 

EX)

struct Resolution {
    var width = 0
    var height = 0
}
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

 

인스턴스를 생성하는 구문은 구조체와 클래스 모두 매우 유사합니다.

let someResolution = Resolution()
let someVideoMode = VideoMode()

 

 

모든 구조체에는 자동으로 생성된 멤버 단위 초기화가 있으며 이를 사용하여 새 구조체 인스턴스의 멤버 속성을 초기화할 수 있습니다. 새 인스턴스의 속성에 대한 초기 값은 이름으로 멤버별 이니셜라이저에 전달될 수 있습니다.

let vga = Resolution(width: 640, height: 480)

구조체와 달리 클래스 인스턴스는 기본 멤버 단위 초기화를 받지 않습니다. (초기화 initialization)

 

 

클래스는 참조 유형입니다.

값 유형과 달리 참조 유형은 변수나 상수에 할당되거나 함수에 전달될 때 복사되지 않습니다 . 복사본이 아니라 동일한 기존 인스턴스에 대한 참조가 사용됩니다.

let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0

frameRate를 30으로 바꿈

let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0

 

 

 

 

 

 

 

 

import UIKit

struct Town{
    //프로퍼티
    let name = "Angelaland"
    var citizens = ["Angela", "Jack Bauer"]
    var resources = ["Gain" : 100, "Ore" :42, "Wool" : 75]
    
    //구조체 안의 리턴값 없는 메서드(구조체나 클래스 안에서의 정의)
    //독립실행형이고 어디선가 자유롭게 사용된다면 함수라고 정의 따라서 fortify는 메서드
    func fortify(){
        print ("Defences increased!")
    }
}


var myTown = Town() //Town개체를 myTown으로 사용

print(myTown.name) // 구조체의 name 출력
print("\(myTown.name) has \(myTown.resources["Gain"]!) bags of grain.")

myTown.citizens.append("Smith") //moTown의 citizens에 Smith추가
print(myTown.citizens.count) //citizens의 개수 출력

myTown.fortify()



//init사용
struct Town_initCase{
    //프로퍼티
    let name : String
    var citizens : [String]
    var resources : [String : Int]
    
    init(name : String, citizens : [String], resources : [String:Int]){
        self.name = name
        self.citizens = citizens
        self.resources = resources
    }
    
    //구조체 안의 리턴값 없는 메서드(구조체나 클래스 안에서의 정의)
    //독립실행형이고 어디선가 자유롭게 사용된다면 함수라고 정의 따라서 fortify는 메서드
    func fortify(){
        print ("Defences increased!")
    }
}

//init으로 Town_initCase 구조체 초기화
var anotherTown = Town_initCase(name: "Nameless Island", citizens: ["Tom"], resources: ["Coconuts" : 100])
anotherTown.citizens.append("Wilson")
print(anotherTown.citizens)

 

 

 

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/classesandstructures#Definition-Syntax

 

Documentation

 

docs.swift.org

 

'iOS > Swift문법' 카테고리의 다른 글

Swift 알고리즘 클럽  (0) 2023.06.30
Swift 기본문법) 특수문자 출력  (0) 2023.06.17
Swift 기본문법) 컬렉션 타입  (0) 2022.09.05
Swift 기본문법) 기본 데이터 타입  (1) 2022.08.31
Swift 기본문법) 상수와 변수  (1) 2022.08.30

+ Recent posts