Latest web development tutorials

스위프트 등록

특정 클래스, 구조 또는 열거 협회와 스위프트 속성 값.

속성 저장 특성으로 나누어 특성을 계산할 수있다 :

스토어 등록계산 속성
상수 또는 변수 저장 부의 일례로서 (오히려 저장하는 것보다) 계산 된 값
클래스 및 구조에 대한 클래스, 구조체, 및 열거를위한

저장 특성 및 속성은 일반적으로 특정 유형의 인스턴스를 계산하는 데 사용됩니다.

속성이 속성은 type 속성을 호출, 유형 자체에 직접 사용할 수 있습니다.

또한, 사용자 지정 작업을 트리거하기 위해, 속성 값의 변화를 모니터링 할 수있는 속성 관찰자를 정의 할 수 있습니다. 속성 뷰어는 상위 클래스에서 상속 된 속성에 첨가 될 수있다 자신의 메모리 속성을 쓰기 위해 첨가 될 수있다.


스토어 등록

간단히 말해, 메모리 속성은 내부의 특정 클래스 또는 구조체의 인스턴스에 저장된 상수 또는 변수이다.

스토리지 속성 (키워드 var에 의해 정의) 변수 스토리지 속성이 될 수 있습니다, 또한 (키워드하자에 의해 정의 된) 일정 스토리지 속성이 될 수 있습니다.

  • 정의가 저장 될 때 당신은 속성의 기본 값을 지정할 수 있습니다

  • 또한 설정 또는 건설 중 자산의 저장 값을 수정, 심지어 일정한 저장 속성 값을 수정할 수 있습니다

import Cocoa

struct Number
{
   var digits: Int
   let pi = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.pi)")

위의 프로그램 실행 출력은 다음과 같습니다

67
3.1415

다음 코드를 살펴 보자 :

let pi = 3.1415

코드 파이가 (파이 = 3.1415), 그래서 상관없이 당신이 구조를 인스턴스화가 변경되지 않습니다 때 정의 속성에 저장된 기본 값을 지정합니다.

당신이 일정한 저장 속성을 정의하면 다음과 같이 수정하려고하면, 그것은 불평 할 것이다 :

import Cocoa

struct Number
{
    var digits: Int
    let numbers = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.numbers)")
n.numbers = 8.7

다음과 같이 위의 프로그램 실행 오류, 오류는 다음과 같습니다

error: cannot assign to property: 'numbers' is a 'let' constant
n.numbers = 8.7

'숫자'를 의미하는 상수, 당신은 그것을 수정할 수 없습니다.


지연 스토리지 속성

이 건물은 초기 값이 계산됩니다 호출 할 때 지연 메모리 속성은 처음을 의미한다.

지연 저장소의 특성을 나타 내기 위해게으른 속성 선언을 사용하기 전에.

참고 :
지연 스토리지 속성합니다 (사용 변수로 선언해야합니다 var 속성 값은 인스턴스 생성자 전에 완료되지 않을 수 있기 때문에, 키워드). 건설 전에 일정한 속성의 초기 값이 있어야 완료되고, 따라서 지연 속성으로 선언 할 수 없다.

지연 저장 특성은 일반적으로 사용된다 :

  • 객체의 생성을 지연.

  • 속성 값은 다른 알 수없는 클래스에 의존하는 경우

import Cocoa

class sample {
    lazy var no = number() // `var` 关键字是必须的
}

class number {
    var name = "w3big Swift 教程"
}

var firstsample = sample()
print(firstsample.no.name)

위의 프로그램 실행 출력은 다음과 같습니다

w3big Swift 教程

변수의 예

당신이 목표 - C의 경험이있는 경우, 당신은 목표 - C 클래스 인스턴스 스토리지 값을 알아야 및 참조는 두 가지 방법을 제공합니다. 속성에 대한, 또한 특성 값을 저장하는 백엔드 인스턴스 변수로서 사용될 수있다.

스위프트 프로그래밍 언어는 통일 속성을 달성하기 위해 이러한 이론을 사용합니다. 스위프트는 백 엔드 스토리지 속성에 직접 액세스 할 수 없습니다, 해당하는 인스턴스 변수 속성이 없습니다. 이 시나리오에서 다른 액세스 방법의 문제점을 방지 할뿐만 아니라, 문으로 속성의 정의를 단순화.

이름, 유형 및 메모리 관리 기능을 포함하여 - - 재산의 유형의 모든 내용은 모두 독특한 장소 (유형 정의) 정의한다.


계산 속성

저장 특성, 종류, 구조 및 열거 이외에 속성에 직접 저장되지 계산 속성 값을 계산하지만, 다른 특성 또는 간접적 변수의 값을 설정하는 임의의 세터의 값을 얻을 수있는 흡착제를 제공하도록 정의 될 수있다.

import Cocoa

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

매개 변수 이름을 정의하지 않습니다 계산 된 속성 setter가 새 값을 나타내는 경우, 기본 이름 newValue에 사용할 수 있습니다.


읽기 전용 계산 속성

만 계산되지 게터 속성 setter는 읽기 전용 계산 속성입니다.

읽기 전용 속성은 항상 포인트를 통해 액세스 할 수있는 (.) 연산자, 계산 된 값을 반환하지만 새 값을 설정할 수 없습니다.

import Cocoa

class film {
    var head = ""
    var duration = 0.0
    var metaInfo: [String:String] {
        return [
            "head": self.head,
            "duration":"\(self.duration)"
        ]
    }
}

var movie = film()
movie.head = "Swift 属性"
movie.duration = 3.09

print(movie.metaInfo["head"]!)
print(movie.metaInfo["duration"]!)

위의 프로그램 실행 출력은 다음과 같습니다

Swift 属性
3.09

참고 :

당신은 사용해야합니다 var 그 값이 고정되어 있지 않기 때문에, 읽기 전용 속성 계산을 포함하여 계산 된 속성을 정의하는 키워드를. let 키워드가 초기화 값 후 수정할 수 없습니다 일정한 속성을 선언하는 데에만 사용됩니다.


부동산의 옵저버

변화를 모니터링하고 각각의 특성은 특성 값을 관찰하기 위해 호출, 심지어 새로운 값과 동일한 시간의 전류 값도 예외는 아니다 될 때 설정 속성 값에 대응하는 특성 뷰어.

또한 속성 방법을 대체하여 (스토리지 및 컴퓨팅 등록 정보 속성 포함) 상속 된 속성에 대한 속성 옵저버를 추가 할 수 있습니다 스토리지 속성 이외의 속성 지연 메모리에 추가로 시청자에 속성을 추가 할 수 있습니다.

참고 :
직접 세터 값을 모니터링하고 변화에 대응할 수 있기 때문에, 속성의 계산에 오버로드 할 수없는 속성 옵저버를 추가 할 필요가 없습니다.

당신은 하나 이상의 속성에 대한 다음과 같은 관찰자 모두를 추가 할 수 있습니다 :

  • willSet 새 값 호출을 설정하기 전에
  • didSet 새 값이 즉시 전화를 설정 한 후
  • willSet 및 didSet 관찰자는 초기화 과정 속성에 호출되지 않습니다
import Cocoa

class Samplepgm {
    var counter: Int = 0{
        willSet(newTotal){
            print("计数器: \(newTotal)")
        }
        didSet{
            if counter > oldValue {
                print("新增数 \(counter - oldValue)")
            }
        }
    }
}
let NewCounter = Samplepgm()
NewCounter.counter = 100
NewCounter.counter = 800

위의 프로그램 실행 출력은 다음과 같습니다

计数器: 100
新增数 100
计数器: 800
新增数 700

글로벌 및 로컬 변수

계산 모드 속성 및 설명 관찰자는 글로벌 및 로컬 변수를 사용할 수있다.

지역 변수글로벌 변수
기능, 방법, 또는 내부 폐쇄에서 변수를 정의했다. 기능, 방법 외부 변수 또는 폐쇄 정의의 모든 종류.
저장하고 값을 검색하십시오. 저장하고 값을 검색하십시오.
스토리지 속성을 얻고 값을 설정합니다. 스토리지 속성을 얻고 값을 설정합니다.
또한, 특성을 계산하기 위해 사용. 또한, 특성을 계산하기 위해 사용.

부동산 유형

유형 속성 ({}) 내측 최 중괄호 쓰는 타입 형태의 일부로 정의된다.

클래스 타입 속성을 정의하는 유형 속성 값 유형을 정의 정적 키워드 클래스 키워드를 사용한다.

struct Structname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

enum Enumname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

class Classname {
   class var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

참고 :
type 속성의 계산 예는 읽기 전용,하지만 당신은 또한 인스턴스 속성을 계산 읽기 및 쓰기 유형 속성 구문과 유사한 계산을 정의 할 수 있습니다.


얻고 속성 유형 값을 설정할

유사한 특성의 예로는, 속성에 대한 액세스의 형태는 도트 오퍼레이터에 의해 수행된다 (.). 그러나, 재산의 종류는 오히려 예로서보다, 통과 및 유형 자체를 설정하는 것입니다. 다음 예는 다음과 같다 :

import Cocoa

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 = 98
print(stud1Mark1.InternalMarks) 

stud1Mark2.InternalMarks = 87
print(stud1Mark2.InternalMarks)

위의 프로그램 실행 출력은 다음과 같습니다

97
87