iOS/swift

Swift - structure (구조체)

돌맹이시터 2021. 6. 23. 22:18

 

 

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