关于swift中的只读属性

getter & setter

  • 在 Swift 中 getter & setter 很少用,以下代码仅供了解

    private var _name: String?
    var name: String? {
        get {
            return _name
        }
        set {
            _name = newValue
        }
    }

    存储型属性 & 计算型属性

    • 存储型属性 - 需要开辟空间,以存储数据
    • 计算型属性 - 执行函数返回其他内存地址
  • var title: String {
        get {
            return "Mr " + (name ?? "")
        }
    }
    • 只实现 getter 方法的属性被称为计算型属性,等同于 OC 中的 ReadOnly 属性
    • 计算型属性本身不占用内存空间
    • 不可以给计算型属性设置数值
    • 计算型属性可以使用以下代码简写
    • var title: String {
          return "Mr " + (name ?? "")
      }

      计算型属性与懒加载的对比

      • 计算型属性

        • 不分配独立的存储空间保存计算结果
        • 每次调用时都会被执行
        • 更像一个函数,不过不能接收参数,同时必须有返回值

          var title2: String {
              return "Mr" + (name ?? "")
          }
          • 懒加载属性

            • 在第一次调用时,执行闭包并且分配空间存储闭包返回的数值
            • 会分配独立的存储空间
            • 与 OC 不同的是,lazy 属性即使被设置为 nil 也不会被再次调用

              lazy var title: String = {
                  return "Mr " + (self.name ?? "")
              }()
时间: 2024-10-03 23:53:23

关于swift中的只读属性的相关文章

《Swift Programming Language 》——Swift中如何使用继承(Inheritance)

一个类可以继承(inherit)另一个类的方法(methods),属性(property)和其它特性.当一个类继承其它类时,继承类叫子类(subclass),被继承类叫超类(或父类,superclass).在 Swift 中,继承是区分「类」与其它类型的一个基本特征. 在 Swift 中,类可以调用和访问超类的方法,属性和附属脚本(subscripts),并且可以重写(override)这些方法,属性和附属脚本来优化或修改它们的行为.Swift 会检查你的重写定义在超类中是否有匹配的定义,以此确

SWIFT中计算两个日期间隔多少小时

SWIFT中如何计算两个日期间隔多少个小时,其实几句代码就可以搞定了,Very Easy,在Playground内输入以下代码 var date1 = "2015-06-26 8:15:10" var dateformatter = NSDateFormatter() dateformatter.dateFormat = "yyyy-MM-dd hh:mm:ss" var dateresult = dateformatter.dateFromString(date1

Swift 中的Range和NSRange不同

Swift中的Ranges和Objective-C中的NSRange有很大的不同,我发现在处理Swift中Ranges相关的问题的时候,总是要花费比我想象的更多的时间.不过,现在回过头来看看,发现Swift中的Ranges的使用还是比较合理的,但是想要正确的使用Ranges真的需要一些特别的技巧. 看一个例子,下面这段代码展示的是截取以指定的字符开头和以指定的字符结尾的子字符串: ? 1 2 3 4 5 6 var str = "Hello, playground"   let ran

Swift 中的基础语法(二)

1.Swift 中的函数 /// 函数的定义 /// /// - Parameters: /// - x: 形参 /// - y: 形参 /// - Returns: 返回值 func sum(x: Int, y: Int) -> Int { return x + y } print(sum(x: 10, y: 20))   /* 外部参数就是在形参前面加了一个字 外部参数不会影响函数内部的细节 外部参数会让外部调用看起来更加直观 外部参数如果使用了'_',在外部调用函数时,会忽略形参的名字 &qu

Swift中的错误处理

前言 任何代码都会发生错误,这些错误有些是可以补救的,有些则只能让程序崩溃.良好的错误处理能够让你的代码健壮性提高,提高程序的稳定性. 本文的Swift版本:Swift 3 Objective C 返回nil 如果出错了,就返回空是Objective C中的一种常见的处理方式.因为在Objective C中,向nil发送消息是安全的.比如: - (instancetype)init { self = [super init]; if (self) { } //如果初始化失败,会返回nil ret

swift中代理的使用

下面以自定义的UITableViewCell的代理为例,记录一下swift中代理的使用 controller中的代码如 1 // 2 // ViewController.swift 3 // simpleDemo 4 // 5 // Created by liubo on 16/7/25. 6 // Copyright © 2016年 liubo. All rights reserved. 7 // 8 9 import UIKit 10 11 class ViewController: UIV

SWIFT中的repeat...while

SWIFT中的repeat...while类似于JAVA\.NET中的 do while.大同小异只是把do换成了repeat var index = 10 repeat{ print(index) index-- } while(index>0)

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存

Swift中编写单例的正确方式

Swift中编写单例的正确方式 2015-12-07 10:23 编辑: yunpeng.hu 分类:Swift 来源:CocoaChina翻译活动 14 10647 Objective-CSwift单例 招聘信息: Cocos2d-x 工程师 cocos2dx手游客户端主程 wp开发 iOS开发工程师 iOS软件工程师 iOS研发工程师 iOS讲师 iOS开发工程师 iOS高级开发工程师 iOS 高级软件工程师 iOS高级开发工程师 本文由CocoaChina译者leon(社区ID)翻译自kr