Latest web development tutorials

สถานที่ให้บริการที่รวดเร็ว

มูลค่าทรัพย์สินที่สวิฟท์ที่มีระดับโครงสร้างหรือสมาคมการแจงนับเฉพาะ

ทรัพย์สินสามารถแบ่งออกเป็นคุณสมบัติการจัดเก็บข้อมูลและคุณสมบัติการคำนวณ:

คุณสมบัติของร้านคุณสมบัติของการคำนวณ
เป็นตัวอย่างของการจัดเก็บส่วนหนึ่งคงที่หรือตัวแปร การคำนวณ (แทนที่จะเก็บ) ค่า
สำหรับการเรียนและโครงสร้าง สำหรับการเรียนโครงสร้างและ enumerations

เก็บรักษาคุณสมบัติและคุณสมบัติโดยทั่วไปจะใช้ในการคำนวณกรณีของชนิดโดยเฉพาะอย่างยิ่ง

คุณสมบัตินอกจากนี้ยังสามารถนำมาใช้โดยตรงในรูปแบบของตัวเองคุณสมบัตินี้ถูกเรียกว่าประเภทแอตทริบิวต์

หรือคุณสามารถกำหนดคุณสมบัติผู้สังเกตการณ์ในการตรวจสอบการเปลี่ยนแปลงในค่าทรัพย์สินเพื่อที่จะเรียกการดำเนินงานที่กำหนดเอง ผู้ชมแอตทริบิวต์สามารถเพิ่มการเขียนแอตทริบิวต์หน่วยความจำของตัวเองอาจมีการเพิ่มคุณสมบัติสืบทอดมาจากระดับผู้ปกครอง


คุณสมบัติของร้าน

ในแง่ง่ายแอตทริบิวต์หน่วยความจำเป็นค่าคงที่หรือตัวแปรที่เก็บไว้ในอินสแตนซ์ของชั้นโดยเฉพาะอย่างยิ่งหรือโครงสร้างภายใน

สถานที่ให้บริการจัดเก็บข้อมูลที่สามารถเป็นคุณลักษณะการจัดเก็บตัวแปร (กำหนดโดย 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

Pi รหัสระบุค่าเริ่มต้นเก็บไว้ในแอตทริบิวต์นิยามเมื่อ (PI = 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 教程

ตัวอย่างของตัวแปร

หากคุณมีประสบการณ์ในการ Objective-C, คุณควรรู้ค่าการจัดเก็บข้อมูลเช่นชั้น Objective-C และอ้างอิงให้สองวิธี สำหรับสถานที่ก็ยังสามารถนำมาใช้เป็นตัวแปรเช่นแบ็กเอนด์ในการจัดเก็บค่าทรัพย์สิน

การเขียนโปรแกรมภาษาสวิฟท์ที่จะใช้ทฤษฎีเหล่านี้เพื่อให้บรรลุอสังหาริมทรัพย์แบบครบวงจร สวิฟท์แอตทริบิวต์ไม่มีตัวแปรเช่นที่สอดคล้องกัน back-end คุณสมบัติการจัดเก็บไม่สามารถเข้าถึงได้โดยตรง นี้หลีกเลี่ยงปัญหาของวิธีการเข้าถึงภายใต้สถานการณ์ที่แตกต่าง แต่ยังลดความซับซ้อนของความหมายของทรัพย์สินเป็นคำสั่ง

ข้อมูลทั้งหมดในประเภทของสถานที่ให้บริการ - รวมทั้งชื่อประเภทและคุณสมบัติการจัดการหน่วยความจำ - ทั้งหมดในสถานที่ที่ไม่ซ้ำกัน (ความคมชัดพิมพ์) คำจำกัดความ


คุณสมบัติของการคำนวณ

นอกเหนือไปจากคุณลักษณะการจัดเก็บข้อมูลประเภทโครงสร้างและ enumerations สามารถกำหนดในการคำนวณค่าทรัพย์สินคำนวณแอตทริบิวต์ไม่ได้เก็บไว้โดยตรง แต่จะให้ทะเยอทะยานที่จะได้รับค่าของหมาตัวเลือกในการตั้งค่าของคุณสมบัติอื่น ๆ หรือตัวแปรทางอ้อม

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 คุณสมบัติเฉพาะ getter ไม่ได้คำนวณคือการคำนวณคุณลักษณะอ่านอย่างเดียว

อ่านอย่างเดียวคุณสมบัติเสมอกลับค่าที่คำนวณ, (.) ผู้ประกอบการในการเข้าถึงผ่านทางจุด แต่ไม่สามารถตั้งค่าใหม่

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 คำหลักที่จะใช้ในการประกาศแอตทริบิวต์คงที่ไม่สามารถแก้ไขได้หลังจากค่าเริ่มต้น


ทรัพย์สินสังเกตการณ์

เปลี่ยนแอตทริบิวต์ของผู้ชมในการตรวจสอบและตอบสนองต่อมูลค่าทรัพย์สินแต่ละคุณสมบัติถูกตั้งค่าเมื่อมูลค่าของทรัพย์สินที่จะได้รับการเรียกตัวไปสังเกตและแม้กระทั่งค่าใหม่และค่าปัจจุบันของในเวลาเดียวกันก็ไม่มีข้อยกเว้น

คุณสามารถเพิ่มคุณสมบัติเพื่อผู้ชมที่นอกเหนือไปจากหน่วยความจำล่าช้าแอตทริบิวต์อื่น ๆ นอกเหนือจากคุณสมบัติการจัดเก็บยังสามารถเพิ่มแอตทริบิวต์สังเกตการณ์สำหรับคุณสมบัติที่ได้รับการถ่ายทอด (รวมทั้งการจัดเก็บและการคำนวณแอตทริบิวต์ทรัพย์สิน) โดยเอาชนะวิธีแอตทริบิวต์

หมายเหตุ:
คุณไม่จำเป็นต้องเพิ่มผู้สังเกตการณ์คุณสมบัติสำหรับการคำนวณของคุณสมบัติที่ไม่สามารถจะมากเกินไปเพราะคุณโดยตรงสามารถตรวจสอบและตอบสนองต่อการเปลี่ยนแปลงในมูลค่า Setter

คุณสามารถเพิ่มหนึ่งหรือทั้งหมดของผู้สังเกตการณ์ต่อไปนี้สำหรับสถานที่:

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

หมายเหตุ:
ตัวอย่างการคำนวณจากประเภทแอตทริบิวต์อ่านอย่างเดียว แต่คุณยังสามารถกำหนดคอมพิวเตอร์อ่านและเขียนได้ประเภทแอตทริบิวต์ไวยากรณ์การคำนวณที่คล้ายกันที่มีคุณลักษณะเช่น


รับและตั้งค่าของประเภทของสถานที่ให้บริการ

ตัวอย่างของคุณสมบัติที่คล้ายกันชนิดของการเข้าถึงไปยังสถานที่ที่มีการดำเนินการโดยผู้ประกอบการจุด (.) แต่ประเภทของทรัพย์สินที่จะได้รับผ่านและกำหนดประเภทของตัวเองมากกว่าโดยวิธีการเช่น ตัวอย่างมีดังนี้

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