Object-C--->Swift之(十)存储属性

简介:

计算属性相当于Object-C的getter、setter合成的属性,在Swift中结构体、类都可以定义计算属性

定义计算属性

[修饰符] var 计算属性名:属性类型{
 get{
 //getter方法执行体,该方法必须有返回值
 }
 [set(形参名)
 {
 //setter方法执行体,该方法一定不能有返回值
 }]
}

注意:var计算属性只能定义成变量形式

enum Season
{
case Spring,Summer,Fall,Winter
var info:String
{
  get{
  print("正在执行getter方法")
    switch(self)
    {
     case .Spring:
     return "春暖花开"
     }
     default:
     return "此恨绵绵无绝期"
}
}
set(newValue)
{
print("正在执行setter方法,传入参数为:\(newValue)")
}
}
}
var s=Season.Spring
print(s.info)//访问info属性,实际就是调用对应的getter方法
s.info="秋高气爽"//对info属性赋值,实际就是调用对应的setter方法
}

再举一个类的例子

class User
{
  var first:String=""
  var last:String=""
  var fullName:String
  {
   get {
     return first + "-" + last
   }
   set(newValue)
   {
     var names=newValue.componentsSeparatedByString("-")
     self.first=names[0]
     self.last=name[1]
   }
  }
  init(first:String,last:String)
  {
  self.first=first
  self.last=last
  }
}
    let s=User(first:"六小龄童",last:"孙悟空")
    print(s.fullName)
    s.fullName="甄子丹-悟空"
    print(s.first)//输出甄子丹
    print(s.last)//输出悟空

setter方法简化

计算属性的setter方法总是只有一个形参,且该形参的类型与该计算属性的类型相同,因此Swift允许在定义计算属性时省略set部分的形参名。
如果程序省略计算属性的set部分的形参名,程序将为该形参提供一个隐式的形参名:newValue。所以可以改为

set{
   var names=newValue.componentsSeparatedByString("-")
   self.first=name[0]
   self.last=name[1]
}

只读的计算属性

只有get部分的话称为只读的计算属性。我们可以省略get关键字和花括号
如上面的可以改为

 var fullName:String{
  return first + "-" + last
 }

注意即使是只读属性也必须用var关键字

目录
相关文章
|
17天前
|
存储 监控 Swift
Swift 属性
10月更文挑战第29天
25 2
|
5月前
|
存储 Swift
Swift开发——属性检查器
Swift中的属性检查器(willSet, didSet)允许在设置存储属性值前后执行代码。在类`Circle`中,属性`radius`使用属性观察器:willSet在赋值前检查值,若值为负则打印警告;didSet在赋值后比较新旧值,根据变化输出相应信息。在实例`c`中,`radius`从-5变为0时,输出“Input value is negative.”和“The circle gets smaller.”;从0变为10时,输出“Input value is normal.”和“The circle gets larger.”。
215 4
Swift开发——属性检查器
|
5月前
|
存储 程序员 Swift
Swift开发——存储属性与计算属性
Swift推荐使用结构体进行开发,结构体支持属性和方法,且作为值类型。结构体属性包括存储属性(如radius)和计算属性(如r),计算属性不存储值,类似方法。结构体用`struct`定义,命名遵循大驼峰规则。实例名遵循小驼峰规则。属性可在结构体中任意位置定义,静态属性用`static`。存储属性可为`lazy`实现懒加载。结构体实例通过`.`访问属性和方法,静态属性和方法用`结构体名.`访问。计算属性可读写,可通过`get`和`set`定义。程序段1展示了结构体Point和Circle的属性和方法,包括私有属性、只读计算属性、可读写计算属性及`mutating`方法。
41 0
Swift开发——存储属性与计算属性
|
6月前
|
前端开发 容器
使用 object-fit 属性完美过渡图片
这篇文章介绍了CSS属性object-fit的用法。object-fit属性用于指定元素的内容如何适应指定容器的高度和宽度。该属性一般适用于img和video标签,可以进行剪切、缩放或拉伸操作。文章中展示了通过object-fit属性来统一设置多张图片的样式,保持原始比例并改变显示位置的示例,以及使用object-position属性实现简单的过渡效果。
使用 object-fit 属性完美过渡图片
|
6月前
|
安全 Swift iOS开发
【Swift开发专栏】Swift中的属性观察者与KVO
【4月更文挑战第30天】Swift编程语言支持属性观察者(`willSet`和`didSet`)和键值观察(KVO)来响应属性变化。属性观察者在设置前(`willSet`)和设置后(`didSet`)执行代码,可用于数据绑定。KVO是Cocoa/Cocoa Touch中的机制,需`NSObject`子类和`@objc dynamic`属性配合使用。注意在观察者销毁前移除观察,以避免内存问题。示例展示了属性观察者实现简单数据绑定。
88 1
|
6月前
|
JavaScript
vue2中$set的原理_它对object属性做了啥?
vue2中$set的原理_它对object属性做了啥?
62 1
|
前端开发
前端学习笔记202306学习笔记第四十一天-Es6-object.defineProperty监听属性的访问和设置1
前端学习笔记202306学习笔记第四十一天-Es6-object.defineProperty监听属性的访问和设置1
45 0
|
6月前
|
存储 算法 安全
【Swift专题】聊聊Swift中的属性
属性是面向对象语言中非常基础的语法特性,我们讲属性,实际上就是讲与类本身或类实例关联的数据。在面向对象的语言中,类作为重要的数据结构会封装数据与函数,类中的函数我们通常称其为方法,而数据则就是属性。
98 1
|
存储 Swift
Swift属性包装器@propertyWrapper
Swift属性包装器@propertyWrapper
123 0
|
前端开发
前端学习笔记202306学习笔记第四十一天-Es6-object.defineProperty监听属性的访问和设置4
前端学习笔记202306学习笔记第四十一天-Es6-object.defineProperty监听属性的访问和设置4
42 0

相关课程

更多