Latest web development tutorials

Obiekt Swift

Swift wartość nieruchomości o określonej klasy, struktury lub stowarzyszenia wyliczenia.

Nieruchomość można podzielić na właściwości magazynowania i oblicza właściwości:

Właściwości StoreWłaściwości obliczeniowe
Jako przykład stałej lub zmiennej części magazynowej Obliczono (zamiast przechowywania) wartość
Dla klas i struktur Dla klas, struktur i wyliczenia

właściwości przechowywania i właściwości są powszechnie stosowane do obliczania wystąpień danego typu.

Właściwości mogą być również stosowane bezpośrednio samego typu, ta właściwość jest nazywany atrybut type.

Alternatywnie, można zdefiniować właściwości obserwatora do monitorowania zmian wartości nieruchomości, w celu uruchomienia operacji niestandardowej. Widz Atrybut może być dodawany do tworzenia własnych atrybut pamięci mogą być dodawane do właściwości odziedziczonych z klasy nadrzędnej.


Właściwości Store

W prostych słowach, atrybut pamięci stałej lub zmiennej przechowywane w instancji danej klasy lub struktury wewnętrznej.

Obiekt bagażu może być zmienną atrybuty przechowywania (zdefiniowane przez var keyword), może to być również stałe atrybuty przechowywania (zdefiniowane przez kluczowych let).

  • Można określić wartość domyślną w nieruchomości, gdy są przechowywane definicje

  • Można również ustawić lub zmodyfikować przechowywaną wartość nieruchomości w trakcie budowy, a nawet zmienić wartość stałej własności magazynowania

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)")

Wyjście powyżej wykonywanie programu jest:

67
3.1415

Rozważmy następujący kod:

let pi = 3.1415

Kod pi określić domyślne wartości przechowywanych w atrybucie definicji kiedy (pi = 3,1415), więc nie ma znaczenia, jeśli wystąpienia struktury, nie ulegnie zmianie.

Jeśli zdefiniujemy stałą właściwość pamięci, będzie narzekać, jeśli starają się zmodyfikować w następujący sposób:

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

Powyższy błąd wykonywania programu, błąd jest następujący:

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

Znaczenie "Liczby" jest stała, nie można go zmodyfikować.


Opóźnienie Właściwości bagażu

atrybutem Pamięć Delay odnosi się po raz pierwszy, gdy nieruchomość jest nazywany jego wartość początkowa zostanie obliczona.

Przed użyciem deklaracji atrybutuleniwy, aby wskazać właściwości przechowywać zwłoki.

Uwaga:
Obiekt opóźnienia bagażu należy zgłosić jako zmienną (używając var keyword), ponieważ wartość nieruchomości nie może być zakończone przed konstruktora instancji. Stała nieruchomości przed rozpoczęciem budowy jest kompletna musi mieć wartość początkową, a zatem nie może zostać uznane za opóźnione nieruchomości.

Właściwości opóźnienia bagażu są powszechnie stosowane:

  • Opóźnia tworzenie obiektów.

  • Gdy wartość właściwości zależy od innych nieznanych klasie

import Cocoa

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

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

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

Wyjście powyżej wykonywanie programu jest:

w3big Swift 教程

Przykłady zmiennych

Jeśli mieli doświadczenie w Objective-C, należy wiedzieć, Objective-C wartość przechowywania instancji klasy i odniesienie oferuje dwie metody. Dla właściwości, może być również stosowany jako zmienne np backend do przechowywania wartości właściwości.

Swift język programowania do korzystania z tych teorii do uzyskania własności ujednolicony. Swift nie przypisuje odpowiednie zmienne instancji, właściwości przechowywania back-end nie mogą być bezpośrednio dostępne. W ten sposób unika się problemów związanych z metodami dostępu w różnych sytuacjach, ale również w celu uproszczenia określenie właściwości jako oświadczenia.

Wszystkie informacje w rodzaju nieruchomości - w tym nazwę, typ i funkcje zarządzania pamięcią - wszystko w wyjątkowym miejscu (definicja typu) definicji.


Właściwości obliczeniowe

Oprócz atrybutów przechowywania, kategorie, struktur i wyliczeń można zdefiniować do obliczenia wartości nieruchomości obliczone atrybut nie są przechowywane bezpośrednio, ale w celu zapewnienia getter, aby uzyskać wartość opcjonalnym układem nastawczym, aby ustawić wartości innych własności lub zmiennych pośrednich.

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)

Wyjście powyżej wykonywanie programu jest:

(150.0, 75.0)
-150.0
-65.0

Jeśli obliczona seter nieruchomość nie definiuje nazwę parametru reprezentuje nową wartość, można użyć domyślnej nazwy nowaWartość.


Tylko do odczytu obliczenia atrybutu

Tylko nie Getter obliczona ustawiająca właściwość jest tylko do odczytu obliczeń atrybutów.

Tylko do odczytu Właściwość zawsze zwraca wartość obliczoną, (.), Aby uzyskać dostęp do Operatora za pośrednictwem punktu, ale nie można ustawić nową wartość.

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"]!)

Wyjście powyżej wykonywanie programu jest:

Swift 属性
3.09

Uwaga:

Należy użyć var słowo kluczowe aby zdefiniować atrybuty obliczeniowe, w tym tylko do odczytu atrybutów obliczeń, ponieważ ich wartość nie jest stała. let parametr jest używany tylko zadeklarować stałą cechę, która nie może zostać zmodyfikowany po wartości inicjalizacji.


nieruchomość Obserwator

Zmień atrybut widza do monitorowania odpowiedzi na wartości nieruchomości każda właściwość jest ustawiona, gdy wartość nieruchomości zostanie wezwany do obserwacji, a nawet nowa wartość oraz wartość bieżąca tym samym czasie nie jest wyjątkiem.

Możesz dodać właściwości do widza oprócz pamięci opóźnienia przypisania innych niż nieruchomości magazynowych można również dodać atrybuty obserwatora na odziedziczonej nieruchomości (w tym składowania i obliczania atrybutów własności) nadrzędnymi sposoby atrybutów.

Uwaga:
Nie ma potrzeby, aby dodać obiekt obserwatora do obliczenia właściwości nie może być przeciążona, ponieważ można bezpośrednio monitorować i reagować na zmiany wartości seter.

Możesz dodać jedną lub wszystkie z poniższych obserwatora nieruchomości:

  • willSet przed ustawieniem nowego połączenia wartości
  • didSet po nowa wartość jest ustawiona zadzwonić od razu
  • willSet i didSet obserwator nie zostanie wywołana w obiekcie proces inicjalizacji
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

Wyjście powyżej wykonywanie programu jest:

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

Zmienne globalne i lokalne

Obliczanie i atrybuty trybu obserwatora opisane mogą być również wykorzystywane do zmiennych globalnych i lokalnych.

zmienne lokalneZmienne globalne
W funkcji, metody lub zamknięciami wewnętrznymi zdefiniowane zmienne. Zmienna poza funkcją, metodzie lub dowolnego rodzaju definicji zamknięcia.
Do przechowywania i odczytu wartości. Do przechowywania i odczytu wartości.
Obiekt bagażu, aby uzyskać i ustawić wartość. Obiekt bagażu, aby uzyskać i ustawić wartość.
Stosowany również do obliczenia właściwości. Stosowany również do obliczenia właściwości.

Typ nieruchomości

Atrybut type jest zdefiniowany jako część typu w rodzaju pisanie peryferyjnych nawiasów klamrowych ({}) wewnątrz.

Użyj słowa kluczowego static zdefiniować typ wartości atrybutu typu, klasy słów kluczowych, aby zdefiniować atrybut type klasy.

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 值
   }
}

Uwaga:
Computational Przykładem atrybutu type jest tylko do odczytu, ale można również zdefiniować obliczeniową do odczytu i zapisu składni atrybutu typu podobną kalkulację z atrybutem instancji.


Pobierz i ustawić wartość typu własności

Przykłady podobnych właściwościach, rodzaj dostępu do nieruchomości prowadzona jest przez operatora kropki (.). Jednak rodzaj własności jest uzyskać i ustawiać samego rodzaju, a nie na zasadzie przykładu. Przykłady są następujące:

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)

Wyjście powyżej wykonywanie programu jest:

97
87