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