با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش Swift را دنبال می کنند. شمارنده ها ، ساختارها و کلاس ها برای تعریف و نگهداری از مقادیر و استفاده از آن ها از متغیرها و ثابت ها به عنوان خصوصیات خود استفاده می کنند. هر کدام از خصوصیات این ساختارها ارزش ها و مقادیری را ذخیره می کنند که برنامه نویس می تواند در طول برنامه از آن ها استفاده کند. همچنین گاهی این خصوصیات در متدها و توابع ساختارها نیز به کار برده می شود. در ادامه ی این مباحث برای آشنایی با چگونگی کار با خصوصیات در Swift با ما همراه باشید.
در این آموزش شما با نمونه ها و طرز کار با خصوصیات در Swift آشنا خواهید شد.
خصوصیت ذخیره شده | خصوصیت محاسبه شده |
---|---|
ذخیره نمونه های ثابت و متغیر. | محاسبه یک مقدار به جای ذخیره سازی مقدار. |
ارائه شده توسط کلاس ها و سازه ها. | ارائه شده توسط کلاس ها، لیست ها و ساختارها. |
خصویات ذخیره شده از ثابت ها توسط کلمه کلیدی ‘let’ تعریف شده و خصوصیات ذخیره شده ی متغیرها نیز توسط کلمه کلیدی ‘var’ مشخص می شود.
در حین تعریف خصوصیت ذخیره شده مقدار پیش فرض را نیز ارائه می دهد.
در هنگام مقدار دهی اولیه می توانید مقدار اولیه را تغیر دهید.
مثال:
1 2 3 4 5 6 7 8 9 10 | struct Number { var digits: Int let pi = 3.1415 } var n = Number(digits: 12345) n.digits = 67 print("\(n.digits)") print("\(n.pi)") |
نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:
1 2 | 67 3.1415 |
خط زیر را در کد فوق در نظر بگیرید:
1 | let pi = 3.1415 |
در اینجا متغیر pi به عنوان یک مقدار ذخیره شده با مثال instance pi = 3.1415 تنظیم شده است.
بنابراین، هر بار که مثال ذکر شده است، ارزش ۳٫۱۴۱۵ را به تنهایی نگه می دارد.
روش دیگر داشتن خصوصیات ذخیره شده استفاده از ساختارهای ثابت است.
مثال:
1 2 3 4 5 6 7 8 9 10 11 | 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 |
نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:
1 2 | error: cannot assign to 'numbers' in 'n' n.numbers = 8.7 |
Swift 4 یک ویژگی انعطاف پذیر را به نام ‘Lazy Stored Property’ فراهم می کند.
در این ویژگی مقدار اولیه در زمان اولین مقدار دهی محاسبه نمی شود.
کاربرد ویژگی Lazy :
1 2 3 4 5 6 7 8 9 10 | class sample { lazy var no = number() } class number { var name = "Swift 4" } var firstsample = sample() print(firstsample.no.name) |
نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:
1 | Swift 4 |
در Objective C، خواص ذخیره شده همچنین دارای متغیرهای نمونه برای پشتیبانی هستند تا مقادیر اعلام شده در خصوصیت ذخیره شده را ذخیره کنند.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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) |
نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:
1 2 3 | (150.0, 75.0) -150.0 -65.0 |
اگر برای یک خصوصیت محاسبه شده یک مقدار اولیه در نظر گرفته نشود، مقدار پیش فرض در نظر گرفته می شود.
یک خصوصیت فقط خواندنی (read-only) در خصوصیت محاسبه شده تعریف می شود.
اما فقط از آن برای بازگرداندن مقادیر استفاده شده و غیر قابل تغیر است.
برای دسترسی به این نوع متغیرها باید از سینتکس ‘.’ استفاده کرد.
مثال :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 4 Properties" movie.duration = 3.09 print(movie.metaInfo["head"]!) print(movie.metaInfo["duration"]!) |
نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:
1 2 | Swift 4 Properties 3.09 |
از این ویژگی در Swift 4 برای مشاهده و پاسخ به ارزش خصوصیات استفاده می شود.
می توانید خصوصیت مشاهده را به روش ارث بری به خصوصیت ذخیره شده اضافه کنید.
خصوصیت مشاهده را می توان به دو صورت تعریف کرد:
مثال :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 = 100 NewCounter.counter = 800 |
نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:
1 2 3 4 | Total Counter is: 100 Newly Added Counter 100 Total Counter is: 800 Newly Added Counter 700 |
متغیرهای محلی و عمومی برای محاسبه و مشاهده ی خصوصیات بکار می روند.
متغیرها محلی | متغیرهای عمومی |
---|---|
متغیرهایی که در یک تابع، متد یا بستار تعریف شده شده اند. | متغیرهایی که خارج از تابع، متد، بستار و یا نوع متن تعریف شده است. |
برای ذخیره و بازیابی مقادیر مورد استفاده قرار می گیرد. | برای ذخیره و بازیابی مقادیر مورد استفاده قرار می گیرد. |
خواص ذخیره شده برای دریافت و تنظیم مقادیر استفاده می شود. | خواص ذخیره شده برای دریافت و تنظیم مقادیر استفاده می شود. |
خواص محاسبه شده نیز استفاده می شود. | خواص محاسبه شده نیز استفاده می شود. |
خصوصیات در بخش تعریف نوع با براکت {} تعریف شده و دامنه متغیرها نیز قبلا تعریف شده است.
برای تعریف انواع خصوصیات برای انواع مقادیر از کلمه ی کلیدی ‘static’ استفاده می شود.
و برای کلاس ها نیز از کلمه ی کلیدی ‘class’ استفاده می شود.
سینتکس :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 } } |
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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) |
نتیجه ی کامپایل و اجرای کد فوق به صورت زیر خواهد بود:
1 2 | 97 87 |
کار با خصوصیات در Swift از بخش های اجتناب ناپذیر برنامه نویسی می باشد، چراکه از خصوصیات برای انواع روش های ذخیره سازی مقادیر و استفاده از آن در طول برنامه استفاده می شود.