스위프트-속성

광고

스위프트 4 언어 값을 연결하는 클래스,열거 또는 구조에 대한 속성을 제공합니다. 속성은 저장된 속성과 계산 된 속성으로 더 분류 할 수 있습니다.

저장된 속성과 계산된 속성의 차이

저장된 속성 계산된 속성
인스턴스 로 상수 및 변수 값 저장 값을 저장하는 대신 값 계산
클래스 및 구조체에서 제공 클래스,열거형 및 구조체에서 제공

저장된 속성과 계산된 속성 모두 인스턴스 유형과 연결됩니다. 속성이 해당 유형 값과 연결되면’유형 속성’으로 정의됩니다. 저장 및 계산 된 속성은 일반적으로 특정 유형의 인스턴스와 연결됩니다. 그러나 속성은 형식 자체와 연관 될 수도 있습니다. 이러한 속성을 형식 속성이라고 합니다. 속성 관찰자는

스위프트(4)는 상수와 변수의 인스턴스를 저장하는 속성 개념을 저장 소개합니다. 상수의 저장된 속성은’하자’키워드에 의해 정의되고 변수의 저장된 속성은’바르’키워드에 의해 정의된다.

  • 정의 중 저장 속성은’기본값’제공
  • 초기화 중에 사용자는 초기 값을 초기화하고 수정할 수 있습니다
struct Number { var digits: Int let pi = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.pi)")

우리는 놀이터를 사용하여 위의 프로그램을 실행할 때,우리는 다음과 같은 결과를 얻을−

673.1415

위의 코드에서 다음 줄을 고려하십시오−

let pi = 3.1415

여기서 변수 파이는 인스턴스 파이=3.1415 와 함께 저장된 속성 값으로 초기화됩니다. 따라서 인스턴스가 참조 될 때마다 값 3.1415 만 보유합니다.

속성을 저장하는 또 다른 방법은 상수 구조를 갖는 것이다. 따라서 구조의 전체 인스턴스는’상수의 저장된 속성’으로 간주 될 것입니다.

struct Number { var digits: Int let numbers = 3.1415}var n = Number(digits: 12345)n.digits = 67print("\(n.digits)")print("\(n.numbers)")n.numbers = 8.7

놀이터를 사용하여 위의 프로그램을 실행하면 다음과 같은 결과가 나타납니다−

error: cannot assign to 'numbers' in 'n'n.numbers = 8.7

‘숫자’를 8.7 로 다시 초기화하는 대신’숫자’가 상수로 선언되었음을 나타내는 오류 메시지가 반환됩니다.

지연 저장 속성

스위프트 4 는 변수가 처음 초기화 될 때 초기 값을 계산하지 않는’지연 저장 속성’이라는 유연한 속성을 제공합니다. ‘게으른’한정자는 변수 선언 전에 게으른 저장 속성으로 사용됩니다.

지연 속성이 사용됩니다.−

  • 개체 생성을 지연합니다.
  • 속성이 클래스의 다른 부분에 종속되어 있는 경우,아직 알려지지 않은
class sample { lazy var no = number() // `var` declaration is required.}class number { var name = "Swift 4"}var firstsample = sample()print(firstsample.no.name)

우리는 놀이터를 사용하여 위의 프로그램을 실행할 때,우리는 다음과 같은 결과를 얻을−

Swift 4

인스턴스 변수

에서 저장된 속성에는 저장된 속성에 선언 된 값을 저장하기 위해 백업 용 인스턴스 변수도 있습니다.

스위프트 4 는 이러한 두 개념을 하나의’저장된 속성’선언에 통합합니다. 대신 해당 인스턴스 변수를 갖는 값을 백업의’저장된 속성은’변수 이름,데이터 유형 및 메모리 관리 기능에 의해 변수 속성에 대한 단일 위치에 정의 된 모든 통합 정보가 포함되어 있습니다.

계산된 속성

값을 저장하는 대신 계산된 속성은 다른 속성 및 값을 간접적으로 검색하고 설정하는 게터와 선택적 설정자를 제공합니다.

class sample { var no1 = 0.0, no2 = 0.0 var length = 300.0, breadth = 150.0 var middle: (Double, Double) { get { return (length / 2, breadth / 2) } set(axis){ no1 = axis.0 - (length / 2) no2 = axis.1 - (breadth / 2) } }}var result = sample()print(result.middle)result.middle = (0.0, 10.0)print(result.no1)print(result.no2)

놀이터를 사용하여 위의 프로그램을 실행하면 다음과 같은 결과가 나타납니다−

(150.0, 75.0)-150.0-65.0

계산된 속성이 새 값을 정의되지 않은 것으로 남겨두면 해당 특정 변수에 대해 기본값이 설정됩니다.

읽기 전용 속성으로 계산된 속성

계산된 속성의 읽기 전용 속성은 게터가 있지만 설정자가 없는 속성으로 정의됩니다. 항상 값을 반환하는 데 사용됩니다. 변수는 더 통해 액세스’.’구문은 다른 값으로 설정할 수 없습니다.

class film { var head = "" var duration = 0.0 var metaInfo: { return }}var movie = film()movie.head = "Swift 4 Properties"movie.duration = 3.09print(movie.metaInfo!)print(movie.metaInfo!)

놀이터를 사용하여 위의 프로그램을 실행하면 다음과 같은 결과가 나타납니다−

Swift 4 Properties3.09

속성 관찰자로 계산 된 속성

스위프트 4 에서 속성 값을 관찰하고 응답하기 위해 속성 관찰자가 사용됩니다. 속성 값이 설정 될 때마다 속성 관찰자가 호출됩니다. 게으른 저장된 속성을 제외하고 메서드’재정의’로 속성 관찰자를’상속 된’속성에 추가 할 수 있습니다.

속성 관찰자는 다음 중 하나에 의해 정의 될 수 있습니다.

  • 값을 저장하기 전에

  • 새 값을 저장 한 후-디 세트

  • 속성이 이니셜라이저에서 설정되면 설정 및 디드셋 관찰자를 호출할 수 없습니다.

class Samplepgm { var counter: Int = 0 { willSet(newTotal){ print("Total Counter is: \(newTotal)") } didSet { if counter > oldValue { print("Newly Added Counter \(counter - oldValue)") } } }}let NewCounter = Samplepgm()NewCounter.counter = 100NewCounter.counter = 800

우리는 놀이터를 사용하여 위의 프로그램을 실행할 때,우리는 다음과 같은 결과를 얻을−

Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700

로컬 및 전역 변수

로컬 및 전역 변수는 속성을 계산하고 관찰하기 위해 선언됩니다.

지역 변수 전역 변수
함수,메서드 또는 클로저 컨텍스트 내에서 정의된 변수입니다. 함수,메서드,클로저 또는 형식 컨텍스트 외부에서 정의된 변수입니다.
값을 저장하고 검색하는 데 사용됩니다. 값을 저장하고 검색하는 데 사용됩니다.
저장된 속성은 값을 가져오고 설정하는 데 사용됩니다. 저장된 속성은 값을 가져오고 설정하는 데 사용됩니다.
계산된 속성도 사용됩니다. 계산된 속성도 사용됩니다.

형식 속성

속성은 중괄호{}가 있는 형식 정의 섹션에 정의되며 변수의 범위도 이전에 정의됩니다. 값 유형에 대한 유형 속성을 정의하기 위해’정적’키워드가 사용되고 클래스 유형에 대해’클래스’키워드가 사용됩니다.

구문

struct Structname { static var storedTypeProperty = " " static var computedTypeProperty: Int { // return an Int value here }}enum Enumname { static var storedTypeProperty = " " static var computedTypeProperty: Int { // return an Int value here }}class Classname { class var computedTypeProperty: Int { // return an Int value here }}

쿼리 및 설정 속성

인스턴스 속성과 마찬가지로 유형 속성을 쿼리하고’로 설정합니다.’인스턴스를 가리키는 대신 형식 만 사용하는 구문.

struct StudMarks { static let markCount = 97 static var totalCount = 0 var InternalMarks: Int = 0 { didSet { if InternalMarks > StudMarks.markCount { InternalMarks = StudMarks.markCount } if InternalMarks > StudMarks.totalCount { StudMarks.totalCount = InternalMarks } } }}var stud1Mark1 = StudMarks()var stud1Mark2 = StudMarks()stud1Mark1.InternalMarks = 98print(stud1Mark1.InternalMarks)stud1Mark2.InternalMarks = 87print(stud1Mark2.InternalMarks)

놀이터를 사용하여 위의 프로그램을 실행하면 다음과 같은 결과가 나타납니다.