Structure (구조체)
:
string, int, float, double, boolean, array, dictionary와 같이 미리 빌드된 자료형 외에
custom 자료형을 만들 수 있게 해준다.
미리 빌드된 다른 자료형과 마찬가지로, structure의 이름도 대문자로 시작해야 한다. - Town
위의 그림과 같이 변수를 하나 만들어서 보관한 후에,
사용하거나 각종 속성에 접근하여 여러가지 작업을 할 수 있게 되었다.
myTown.citizens.append("Gaga") -- append로 새로운 항목을 추가할 수도 있고,
myTown.citizens.count -- count로 항목의 갯수를 확인하거나 사용할 수도 있다.
또한, 구조체 내에 함수를 만들 수 있는데 이 함수를 method 라고 부른다.
***
func 으로 어떤 동작을 만들었을 때,
structure 또는 class 내에서 만들었다면 method
독립적으로 만들었다면 function
이라고 부른다.
***
structure는 결국 blueprint와 같은 역할을 담당한다.
자동차의 struct를 만든다고 생각할 때
property - color, car type(hatchback, sedan..), size, number of wheel...
method - func drive(), func light(), ...
등으로 구성된다고 생각할 수 있다.
위의 내용이 구조체의 맛보기였다면,
이제 하나의 구조체를 생성해서 여러 번 사용할 수 있도록 만들어볼 것이다.
name, citizens, resources의 항목들을 모두 지우고,
어떤 자료형을 받을 것인지 지정해줬다.
구조체를 사용하기 위해 initializer가 필요하다.
init을 입력하면 나오는 snippet symbol을 선택해주고
parameter, statements를 입력하면 된다.
parameter - 이니셜라이저에 필요한 변수들을 입력해준다.
townName: String, people: [String], stats : [String : Int]
를 입력해주었다.
statements - 각각의 property에 해당하는 값을 지정(?)해준다.
name = townName
citizens = people
resources = stats
를 입력해줬다.
여기까지 작성한 코드를 바탕으로, 새로운 town을 만들고자 할 때
내가 설정한 input parameter들이 나타나는 것을 확인할 수 있다.
Challenge )
"User" structure 만들기
1. property - name, email(optional), number of followers, isActive(whether they are active or not)
2. method - logStatus()
: if the user is active, the method needs to print "XXX is working hard". Otherwise, print "XXX has left earth"
3. struct 생성 이후, user 생성 - "Richard", 0 followers, not active
4. 3에서 생성한 user를 logStatus()로 출력할 것
func exercise() {
// Define the User struct here
struct User {
let name : String
var email : String? = nil
var followers : Int
var isActive : Bool
init(name : String, email : String? = nil, followers : Int, isActive : Bool) {
self.name = name
self.email = email
self.followers = followers
self.isActive = isActive
}
func logStatus() {
if isActive == true {
print ("\(name) is working hard")
} else {
print ("\(name) has left earth")
}
}
}
// Initialise a User struct here
let richard = User(name: "Richard", followers: 0, isActive: false)
richard.logStatus()
// Diagnostic code - do not change this code
print("\nDiagnostic code (i.e., Challenge Hint):")
var musk = User(name: "Elon", email: "elon@tesla.com", followers: 2001, isActive: true)
musk.logStatus()
print("Contacting \(musk.name) on \(musk.email!) ...")
print("\(musk.name) has \(musk.followers) followers")
// sometime later
musk.isActive = false
musk.logStatus()
}
'iOS > swift' 카테고리의 다른 글
swift - Functions with Output (0) | 2021.06.29 |
---|---|
MVC Design pattern (0) | 2021.06.28 |
swift5 - sound play with simple code (0) | 2021.06.15 |
Swift - nil & Optional (물음표, 느낌표) (0) | 2021.06.12 |
Swift - Dictionary (0) | 2021.06.12 |