Swift屬性

屬性的存儲html

 

屬性的主要做用是存儲數據,能夠常量屬性和變量屬 性;swift

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片ide

  1. struct FixedLengthRange {  this

  2. var firstValue: Int let length: Int  spa

  3. }  .net

  4. var rangeOfThreeItems =FixedLengthRange(firstValue: 0,  code

  5. length: 3)   orm

  6. // the range represents integer values 0, 1, and2 rangeOfThreeItems.firstValue = 6  htm

  7. // the range now represents integer values 6, 7, and 8  blog


可是 rangeOfFourItems 實例爲常量屬性也是不能夠修改的。

l

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. et rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)  

  2. // this range represents integer values 0, 1, 2, and 3 rangeOfFourItems.firstValue = 6  


延時存儲屬性

延時存儲屬性是初始化時候不分配值,直到第一次使 用它。

屬性@lazy 聲明。

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. class DataImporter {  

  2. /*  

  3. DataImporter is a class to import data from anexternalfile.  

  4. The   class  is assumed     to  take  a  non-trivial amount of time toinitialize.  

  5. */  

  6. var fileName = "data.txt"  

  7. // the  DataImporter   class  would   provide  dataimporting functionality here  

  8. }  

  9. class DataManager {  

  10. @lazy varimporterDataImporter()  

  11. var data = ""  

  12. // the DataManager class would provide data management functionality here  

  13. }  

  14. let managerDataManager() manager.data += "Some data" manager.data += "Some more data"  

  15. println(manager.importer.fileName)  


計算屬性

有的時候一些屬性是經過其餘的屬性計算得出的,通 過 get 和 set 訪問器對其訪問。

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. //定義 Point struct Point {  

  2. var x =0.0, y = 0.0  

  3. }  

  4. //定義 Size struct Size {  

  5. var width = 0.0, height = 0.0  

  6. }  

  7. //定義 Rect struct Rect {  

  8. var origin = Point()  

  9. var size = Size()  

  10. var center: Point {  

  11. get {  

  12. let centerX = origin.x+ (size.width / 2)  

  13. let centerY = origin.y + (size.height / 2)  

  14. return Point(x: centerX, y: centerY)  

  15. }  

  16. set(newCenter) {  

  17. origin.x = newCenter.x - (size.width / 2)  

  18. origin.y = newCenter.y - (size.height / 2)   

  19. }  

  20. }  

  21. }  

  22. var square =Rect(origin: Point(x: 0.0, y: 0.0), size: Size(width: 10.0,height: 10.0))  

  23. let initialSquareCenter =square.center square.center = Point(x: 15.0, y: 15.0) println("square.origin is  now    at  (\(square.origin.x),  

  24. \(square.origin.y))")  

  25.    


 

屬性觀察者

 

爲了監聽屬性的變化,swift 經過了屬性觀察者。

 

• willSet 觀察者是在存儲以前調用。

• didSet 新值存儲後調用。

 

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. class StepCounter {  

  2. var totalSteps: Int = 0{  

  3. willSet(newTotalSteps) {  

  4. println("About    to    set    totalSteps    to  

  5. \(newTotalSteps)")  

  6. }  

  7. didSet {  

  8. if totalSteps >oldValue   {  

  9. steps")  

  10. }  

  11. println("Added   \(totalSteps  - oldValue)  

  12. }  

  13. let stepCounter = StepCounter()  

  14. stepCounter.totalSteps = 200  

  15. // About to set totalStepsto 200  

  16. // Added200steps stepCounter.totalSteps = 360  

  17. // About to set totalStepsto 360  

  18. // Added160steps stepCounter.totalSteps = 896  

  19. // About to set totalStepsto 896  

  20. // Added536steps  


靜態屬性

 

靜態屬性在結構體中使用 static 定義,類中使用 class

定義。

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. struct SomeStructure {  

  2. static var storedTypeProperty = "Some value."static var computedTypeProperty: Int{  

  3. // return anInt value here   

  4. }  

  5. }  

  6. class SomeClass {  

  7. class varcomputedTypeProperty: Int {  

  8. // return anInt value here  

  9. }  

  10. }  


調用的時候能夠直接使用類和結構體名調用。 實例:

 

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

  1. struct AudioChannel {  

  2. static letthresholdLevel10  

  3. static var maxInputLevelForAllChannels0 var currentLevel:Int = 0 {  

  4. didSet {  

  5. if               currentLevel                 > AudioChannel.thresholdLevel {  

  6. // cap   the  new   audio   level  to  the threshold level  

  7. currentLevel                             = AudioChannel.thresholdLevel  

  8. if               currentLevel                 > AudioChannel.maxInputLevelForAllChannels {  

  9. // storethis as the new overall maximum input level  

  10. AudioChannel.maxInputLevelForAllChannels          =  

  11. currentLevel  

  12. }  

  13. }  

  14. }  

  15. }  

  16. var leftChannel =AudioChannel()  

  17. var rightChannel =AudioChannel()  

  18. leftChannel.currentLevel = 7println(leftChannel.currentLevel)  

  19. // prints "7"  

  20. println(AudioChannel.maxInputLevelForAllChannels)  


Swift交流討論論壇論壇:http://www.cocoagame.net

歡迎加入Swift技術交流羣:362298485

相關文章
相關標籤/搜索