Static
static 프로퍼티
및 메서드의 일반적인 용도 중 하나는 전체 앱에서 사용하는 일반적인 기능을 저장하는 것입니다.
static
은 struct
, enum
에서 선언할 때 사용하고, class
은 클래스나 프로토콜에서 사용합니다.
예를 들어, 폴은 Swift를 배우는 사람들을 위한 무료 iOS 앱인 Unwrap이라는 앱을 만듭니다. 이 앱에서 App Store의 앱 URL과 같은 몇 가지 일반적인 정보를 저장하여 앱이 필요한 곳이면 어디에서나 참조할 수 있습니다. 그래서 내 데이터를 저장하는 다음과 같은 코드가 있습니다.
struct Unwrap {
static let appURL = "https://itunes.apple.com/app/id1440611372"
}
이렇게 해야 Unwrap.app 을 쓸 수 있습니다. 다른 사람이 앱에서 무언가를 공유할 때 URL이 제공되므로 또 다른 사람이 앱을 검색할 수 있습니다. static
키워드가 없으면 고정 앱 URL 을 읽기 위해 Unwrap struct
의 새 인스턴스를 만들어야 하는데, 그럴 필요가 없어지죠.
지금까지 생성한 모든 프로퍼티와 메서드는 구조체의 개별 인스턴스에 속했습니다.
즉, 아래 예제와 같이 Student
구조체가 있으면 각각 고유한 프로퍼티 및 메서드를 사용하여 여려 개의 Student
인스턴스를 만들 수 있습니다.
struct Student {
var name: String
init(name: String) {
self.name = name
}
}
let pho = Student(name: "포뇨")
let Sho = Student(name: "소스케")
let Seogun = Student(name: "서근")
또한, static
으로 선언하여 구조체의 모든 인스턴스에서 특정 프로퍼티 및 메서드를 공유하도록 Swift에 요청할 수도 있습니다.
이것을 사용해서 학생이 추가될 때 마다 카운트를 하는 프로퍼티를 만들어 보겠습니다.
struct Student {
var name: String
static var classSize = 0
init(name: String) {
self.name = name
Student.classSize += 1
}
}
let pho = Student(name: "포뇨")
let Sho = Student(name: "소스케")
let Seogun = Student(name: "서근")
classSize
프로퍼티는 struct
의 인스턴스가 아닌 struct
자체에 속하므로 Student.classSize
를 사용하여 호출해야 합니다.
print(Student.classSize)
//3
예시
struct NewsStory {
static var breakingNewsCount = 0
static var regularNewsCount = 0
var headline: String
init(headline: String, isBreaking: Bool) {
self.headline = headline
if isBreaking {
NewsStory.breakingNewsCount += 1
} else {
NewsStory.regularNewsCount += 1
}
}
}
struct FootballTeam {
static let teamSize = 11
var players: [String]
}
struct Pokemon {
static var numberCaught = 0
var name: String
static func catchPokemon() {
print("잡았다!")
Pokemon.numberCaught += 1
}
}
Pokemon.catchPokemon()
print(Pokemon.numberCaught)
//잡았다.
//1
Static TEST : 문제를 풀려면 이곳을 클릭해주세요.
읽어주셔서 감사합니다🤟
'SWIFT > Grammar' 카테고리의 다른 글
Swift : 기초문법 [Unwrapping with guard] (0) | 2021.03.02 |
---|---|
Swift : 기초문법 [클래스 - Class] (0) | 2021.03.01 |
Swift : 기초문법 [기본 연산자] (0) | 2021.03.01 |
swift : 기초문법 [ 프로퍼티 #1-1 지연 저장 프로퍼티(Lazy)] (0) | 2021.03.01 |
Swift : 기초문법 [Array의 프로퍼티 및 메서드] (3) | 2021.02.28 |