《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法

简介:

可以在原始类型上扩展计算属性,包括实例计算属性和静态计算属性。添加计算属性的定义,与普通的计算属性的定义是一样的。

实例计算属性示例:在网络编程时,为了减少流量,从服务器端返回的不是信息描述,而是编码,然后在本地再将编码转换为描述信息。为此定义了如下Int类型扩展:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
extension Int {               //定义Int类型的扩展
     var errorMessage : String {    //只读计算属性
         var errorStr = ""
         switch  (self) {    
         case  - 7 :
             errorStr =  "没有数据。"
         case  - 6 :
             errorStr =  "日期没有输入。"
         case  - 5 :
             errorStr =  "内容没有输入。"
         case  - 4 :
             errorStr =  "ID没有输入。"
         case  - 3 :
             errorStr =  "据访问失败。"
         case  - 2 :
             errorStr =  "您的账号最多能插入10条数据。"
         case  - 1 :
             errorStr =  "用户不存在,请到http://51work6.com注册。"
         default :
             errorStr =  ""
         }              
         return  errorStr
     }
}
let message =(- 7 ).errorMessage       //获得-7编码对应的描述信息
print( "Error Code : -7 , Error Message : \(message)" )


注意整个-7包括负号是一个完整的实例,因此调用它的属性时需要将-7作为一个整体用小括号括起来。然而,如果是7则不需要括号。

下面再看一个静态属性的示例:

1
2
3
4
5
6
7
8
9
10
11
12
struct Account {              //定义Account结构体
     var amount : Double =  0.0                //账户金额
     var owner : String =  ""                  //账户名
}
  
extension Account {           //定义Account结构体的扩展静态
     static  var interestRate : Double {       //利率  
        return0. 0668
     }
}
  
print(Account.interestRate)   //打印输出interestRate属性


打印输出interestRate属性,访问方式与其他的静态计算属性一样,通过“类型名”加“.”来访问静态计算属性。

 

扩展方法

可以在原始类型上扩展方法,包括实例方法和静态方法。这些添加方法的定义与普通方法的定义是一样的。

下面先看一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
extension Double { //定义Double类型的扩展
     static  var interestRate : Double =  0.0668 //利率
     func interestBy1() -> Double {        
         return  self * Double.interestRate   //静态属性利率
     }
     mutating func interestBy2() {     //定义实例方法interestBy2
         self = self * Double.interestRate  
     }
     static  func interestBy3(amount : Double) -> Double {   //定义静态方法interestBy3
         return  interestRate * amount        //返回值是计算利息结果
     }
}
  
let interest1 = (10_000. 00 ).interestBy1()     //调用interestBy1方法计算利息
print( "利息1 :\(interest1)" )
  
var interest2 = 10_000. 00     //调用interestBy2方法计算利息
interest2.interestBy2()  
print( "利息2 :\(interest2)" )
  
var interest3 = Double.interestBy3(10_000. 00 )     //调用interestBy3方法计算利息
print( "利息3 :\(interest3)" )


代码self = self *Double.interestRate,把计算结果直接赋值给当前实例self。在结构体和枚举类型中给self赋值会有编译错误,需要在方法前面加上mutating关键字,表明这是变异方法。

调用interestBy1方法计算利息,调用它的实例10_000.00,它的返回值被赋值给interest1常量,这是很常见的调用过程。

调用interestBy2方法计算利息,我们不能使用10_000.00实例调用,而是需要一个Double类型的变量interest2interestBy2是变异方法,它会直接改变变量interest2的值,因此interest2.interestBy2()语句调用完成后,变量interest2的值就改变了。



本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1747538,如需转载请自行联系原作者

相关文章
|
3月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
77 2
|
3月前
|
Swift 索引 容器
Swift 泛型-扩展泛型类型
Swift 泛型-扩展泛型类型
50 2
|
3月前
|
Swift
Swift 扩展
Swift 扩展
40 1
|
3月前
|
Swift iOS开发
Swift 方法
10月更文挑战第29天
30 4
|
3月前
|
存储 监控 Swift
Swift 属性
10月更文挑战第29天
43 2
|
6月前
|
存储 编译器 Swift
Swift笔记:Swift中的扩展语法
Swift笔记:Swift中的扩展语法
173 1
|
8月前
|
存储 Swift 索引
Swift开发——索引器扩展
扩展用于向已存在的类型(例如,类、结构体、枚举和协议等)中添加新的功能,扩展甚至可以向系统类型(包括无法查阅代码的类型)中添加新的功能,但是扩展不能覆盖原类型中已有的方法,扩展也不能向类中添加新的存储属性。
70 6
Swift开发——索引器扩展
|
8月前
|
存储 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.”。
241 4
Swift开发——属性检查器
|
8月前
|
存储 程序员 Swift
Swift开发——存储属性与计算属性
Swift推荐使用结构体进行开发,结构体支持属性和方法,且作为值类型。结构体属性包括存储属性(如radius)和计算属性(如r),计算属性不存储值,类似方法。结构体用`struct`定义,命名遵循大驼峰规则。实例名遵循小驼峰规则。属性可在结构体中任意位置定义,静态属性用`static`。存储属性可为`lazy`实现懒加载。结构体实例通过`.`访问属性和方法,静态属性和方法用`结构体名.`访问。计算属性可读写,可通过`get`和`set`定义。程序段1展示了结构体Point和Circle的属性和方法,包括私有属性、只读计算属性、可读写计算属性及`mutating`方法。
60 0
Swift开发——存储属性与计算属性
|
9月前
|
存储 设计模式 安全
【Swift开发专栏】Swift的扩展与分类
【4月更文挑战第30天】Swift的扩展和枚举分类提供类型添加新功能的灵活性。文章分为三部分:扩展用于为已有类型添加属性、方法等,适用于功能扩展、代码组织;枚举分类定义相关值,支持原始值和关联值,用于状态表示和类型安全选项。扩展和分类在实际开发中应用于类型增强、状态管理及组合使用。了解并掌握这些特性,能提升代码的灵活性和可维护性。更多高级特性和应用值得进一步探索。
129 2

热门文章

最新文章