Swift-구조

Swift 4는 구조를 구조로 사용하는 유연한 빌딩 블록을 제공합니다. 이러한 구조를 사용하여 한 번 생성 메서드와 속성을 정의 할 수 있습니다.

C 및 Objective C와 달리

  • 구조에는 구현 파일 및 인터페이스가 필요하지 않습니다.

  • 구조를 통해 단일 파일을 만들고 해당 인터페이스를 다른 블록으로 자동 확장 할 수 있습니다.

구조에서 변수 값은 값을 변경할 수 없도록 이전 값의 복사본을 반환하여 후속 코드로 복사 및 전달됩니다.

통사론

Structures are defined with a 'Struct' Keyword.
struct nameStruct {
   Definition 1
   Definition 2
   ---
   Definition N
}

구조의 정의

예를 들어, 세 과목의 표시가 포함 된 학생 기록에 액세스하고 총 세 과목을 찾아야한다고 가정합니다. 여기서 markStruct는 데이터 유형 'Int'로 세 개의 마크가있는 구조를 초기화하는 데 사용됩니다.

struct MarkStruct {
   var mark1: Int
   var mark2: Int
   var mark3: Int
}

구조 및 속성에 액세스

구조의 구성원은 구조 이름으로 액세스됩니다. 구조의 인스턴스는 'let'키워드로 초기화됩니다.

struct studentMarks {
   var mark1 = 100
   var mark2 = 200
   var mark3 = 300
}

let marks = studentMarks()
print("Mark1 is \(marks.mark1)")
print("Mark2 is \(marks.mark2)")
print("Mark3 is \(marks.mark3)")

Playground를 사용하여 위의 프로그램을 실행하면 다음과 같은 결과를 얻습니다.

Mark1 is 100
Mark2 is 200
Mark3 is 300

학생 마크는 구조 이름 'studentMarks'로 액세스됩니다. 구조체 멤버는 정수 유형 값을 사용하여 mark1, mark2, mark3으로 초기화됩니다. 그런 다음 구조 studentMarks ()가 'let'키워드를 사용하여 'marks'에 전달됩니다. 이후 '마크'에는 구조 멤버 값이 포함됩니다. 이제 '.'로 구조 멤버 값에 액세스하여 값이 인쇄됩니다. 초기화 된 이름으로.

struct MarksStruct {
   var mark: Int

   init(mark: Int) {
      self.mark = mark
   }
}

var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct     // aStruct and bStruct are two structs with the same value!
bStruct.mark = 97

print(aStruct.mark)      // 98
print(bStruct.mark)      // 97

Playground를 사용하여 위의 프로그램을 실행하면 다음과 같은 결과를 얻습니다.

98
97

구조의 모범 사용 사례

Swift 4 언어는 기능 블록을 구축하기위한 사용자 지정 데이터 유형으로 구조를 정의하는 기능을 제공합니다. 구조의 인스턴스는 추가 조작을 위해 정의 된 블록으로 값에 의해 전달됩니다.

구조 필요

  • 간단한 데이터 값을 캡슐화합니다.

  • 캡슐화 된 데이터 및 관련 속성을 '참조'가 아닌 '값'으로 복사합니다.

  • '복사'및 '참조'구조.

Swift 4의 구조는 참조가 아닌 값으로 멤버를 전달합니다.

struct markStruct {
   var mark1: Int
   var mark2: Int
   var mark3: Int

   init(mark1: Int, mark2: Int, mark3: Int) {
      self.mark1 = mark1
      self.mark2 = mark2
      self.mark3 = mark3
   }
}

var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
print(marks.mark1)
print(marks.mark2)
print(marks.mark3)

Playground를 사용하여 위의 프로그램을 실행하면 다음과 같은 결과를 얻습니다.

98
96
100

다른 예시

struct markStruct {
   var mark1: Int
   var mark2: Int
   var mark3: Int
   
   init(mark1: Int, mark2: Int, mark3: Int) {
      self.mark1 = mark1
      self.mark2 = mark2
      self.mark3 = mark3
   }
}

var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)

print(fail.mark1)
print(fail.mark2)
print(fail.mark3)

Playground를 사용하여 위의 프로그램을 실행하면 다음과 같은 결과를 얻습니다.

34
42
13

구조 'markStruct'는 멤버 mark1, mark2 및 mark3으로 먼저 정의됩니다. 이제 멤버 클래스의 변수가 초기화되어 정수 값을 보유합니다. 그런 다음 구조 멤버의 사본이 'self'키워드로 생성됩니다. 구조 멤버의 사본이 생성되면 매개 변수 표시가있는 구조 블록이 이제 학생 표시를 보유하게 될 'marks'변수로 전달됩니다. 그런 다음 마크는 98, 96, 100으로 인쇄됩니다. 동일한 구조 멤버에 대한 다음 단계는 'fail'이라는 다른 인스턴스를 사용하여 다른 마크를 가진 동일한 구조 멤버를 가리 킵니다. 그런 다음 결과는 이제 34, 42, 13으로 인쇄됩니다. 이것은 구조가 멤버 변수의 사본을 갖게되고 멤버를 다가오는 함수 블록으로 전달한다는 것을 명확하게 설명합니다.