Swift에서는 사용자의 고유한 타입을 두 가지 방식으로 선언할 수 있고 그 중 가장 일반적인 방법은 structs 라고 불린다.
Struct는 자신만의 변수와 상수, 함수를 가질 수 있고 원하는 대로 만들고 사용될 수 있다.
Struct Sport {
var name: String
}
var tennis = Sport(name: “Tennis”)
print(tennis.name)
tennis.name = “Lawn tennis”
Swift에는
struct Sport {
var name: String
}
Sport 구조체에 다른 저장된 프로퍼티를 추가하고 계산된 프로퍼티를 추가할 것이다.
struct Sport {
var name : String
var isOlympicSport: Bool
var olympicStatus: String {
if isOlympicSport {
return “\(name) is an Olympic sport”
} else {
Return “\(name) is not an Olympic sport”
}
}
}
let chessBoxing = Sport(name: “Chessboxing”, isOlympicSport: false)
print(chessBoxing.olympicStatus)
property observer는 프로퍼티가 변화하기 전이나 후에 코드를 실행할 수 있게 한다.
struct Progress {
var task: String
var amount: Int
}
var progress = Progress(task:”Loading data”, amount: 0)
progress.amount = 30
progress.amount = 80
progress.amount = 100
Swift가 amount가 변화할 때마다 메시지를 출력하기 위해 didSet 프로퍼티 옵져버를 사용한다.
struct Progress {
var task: String
var amount : Int {
didSet {
print(“\(task) is now \(amount)% complete”)
}
}
}
너는 프로퍼티가 변경되기 전에 작동하는 willSet도 사용할 수 있지만 이것은 거의 사용되지 않는다.
구조체는 내부에 함수를 가질 수 있고 이 함수들은 필요시 구조체의 프로퍼티들도 사용할 수 있다.
구조체 안의 함수들은 methods라고 불리지만 똑같이 func 키워드를 사용한다.
struct City {
var population : Int
func collectTaxes() -> Int {
return population * 1000
}
}
let London = City(population:9_000_000)
london.collectTaxes()
구조체가 변수 프로퍼티를 가지지만 인스턴스는 상수로 생성되는 경우,
그 프로퍼티는 변경될 수 없다. – 그 구조체는 상수이므로 무엇으로 생성되었는지에 관계없이 구조체의 모든 프로퍼티들 또한 상수이다.
구조체를 생성할 때 Swift는 이 구조체를 상수로 사용할 지 변수로 사용할 지 모르기 때문에 디폴트로 안전한 접근 방식을 취한다.
: swift는 구체적으로 요구(mutating)하지 않는 이상 프로퍼티를 변경시키는 매서드를 작성할 수 없게 한다.
struct Person {
var name: String
mutating func make Anonymous() {
name = “Anonymous”
}
}
var person = Person(name:”Ed”)
person.makeAnonymous()
여태까지 많은 문자열들을 사용해왔고 그들은 – 문자열을 조회하고 조작할 때 사용하는 고유한 매서드와 프로퍼티를 가지는 - 구조체라고 밝혀졌다.
let string = “Do or not, there is no try.”
print(string.count)
print(string.hasPrefix(“Do”))
print(string.uppercased())
print(string.sorted())
문자열은 매우 다양한 프로퍼티와 매서드를 갖고 있다.
배열도 마찬가지로 구조체이다.
이는 배열도 그들만의 매서드와 프로퍼티를 가지고 이것들을 사용하여 배열을 조회하고 조작할 수 있다는 것을 의미한다.
var toys = [“Woody”]
print(toys.count)
toys.append(“Buzz”)
toys.firstIndex(of: “Buzz”)
print(toys.sorted())
toys.remove(at: 0)
배열에도 매우 많은 프로퍼티와 매서드가 있다.