swift 属性

Swift —— 属性 Swift —— 属性1. 存储属性1.1 let 和 var 的区别代码角度汇编角度SIL角度2. 计算属性 1. 存储属性 存储属性是一个作为特定类和结构体实例一部分的常量或变量。存储属性要么是变量存储属性 (由 var 关键字引入)要么是常量存储属性(由 let 关键字引入)。存储属性这里没有什么特 别要强调的,因为随处可⻅。 比如这里的 age 和 name 就是我们所说的存储属性,这里我们需要加以区分的是 let 和 var 两者的区别:从定义上: let 用来声明常量,常量的值一旦设置好便不能 阅读详情

存储属性

简单的说,一个存储属性就是存储在特定类或结构体实例里的一个常量或者变量。存储属性可以是变量存储属性也可以是常量存储属性。
可以在定义存储属性的时候指定默认值,也可以在构造过程中设置或修改存储属性的值,甚至修改常量存储属性的值。
该结构体用于描述整数的范围,这个范围值在创建后不能被修改。因为它是一个常量存储属性。
 struct FixedLengthRange {
        var firstValue: Int
        let length: Int
    }
var rangeOfThreeItems = FixedLengthRange(firstValue:0,length:3)
        rangeOfThreeItems.firstValue = 6

常量结构体的存储属性

如果创建了一个结构体的实例并将其赋值给一个常量,则无法修改该实例的任何属性,即使有属性被声明为变量也不行。因为rangeOfThreeItems被声明为常量,即使firstValue是一个变量属性,也没有办法修改它了。
这种行为是由于结构体属于值类型。当值类型的实例被声明为常量的时候,它的所有属性也就成了常量。属于引用类型的类则不一样。把一个引用类型的实例赋给一个常量后,仍然可以修改该实例的变量属性。

延迟存储属性

延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性。在属性声明前使用lazy来表示一个延迟存储属性。
延迟属性很有用,当属性的值依赖于在实例的构造过程结束后才会知道影响值的外部因素时,或者当获得属性的初始值需要复杂或大量计算时,可以只在需要的时候计算它。
下面的例子使用了延迟存储属性来避免复杂类中不必要的初始化。
    class DataImporter {
        var fileName = "data.txt"
        
    }
    
    class DataManager {
        lazy var importer = DataImporter()
        var data = [String]()
    }
  let manager = DataManager()
        manager.data.append("some data")
        manager.data.append("some more data")
DataManager类包含一个名为data的存储属性,初始值是一个空的字符串数组。这里没有给出全部的代码,只需知道DataManager类的目的是管理和提供对这个字符串数组的访问即可。DataManager的一个功能是从文件导入数据。该功能由DataImporter类提供,DataImporter完成初始化需要消耗不少时间:因为它的实例在初始化时可能要打开文件,还要读取文件内容到内存。DataManager管理数据时也可能不从文件中导入数据。所以当DataManager的实例被创建时,没有必要创建一个DataImporter的实例,更;明智的做法是第一次用到DataImporter的时候才去创建。

计算属性

除存储属性外,类、结构体和枚举可以定义计算属性。计算属性不直接存储值,而是提供一个getter和一个可选的setter,来间接获取和设置其他属性或者变量的值。
    struct Point {
        var x = 0,y = 0
    }
    
    struct Size {
        var width = 0,height = 0
    }
    
    struct Rect {
        var origin = Point()
        var size = Size()
        var center:Point {
            get{
                let centerX = origin.x + (size.width / 2)
                let centerY = origin.y + (size.height / 2)
                return Point(x:centerX,y:centerY)
            }
            set(newCenter){
                origin.x = newCenter.x - (size.width / 2)
                origin.y = newCenter.y - (size.height / 2)
            }
        }
    }
  var square = Rect(origin:Point(x:0,y:0),size:Size(width:10,height:10))
        square.center = Point(x:15,y:15)
如果计算属性的setter没有定义表示新值的参数名,则可以使用默认名称newValue。

只读计算属性

只有getter没有setter的计算属性就是只读计算属性。只读计算属性总是返回一个值,可以通过点运算符访问,但不能设置新的值。只读计算属性的声明可以去掉get关键字和花括号:
    struct Cuboid {
        var width = 0.0, height = 0.0,depth = 0.0
        var volume:Double{
            return width * height * depth
        }
    }

属性观察器

属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,即使新值和当前值相同的时候也不例外。
可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重写属性的方式为继承的属性添加属性观察器。你不必为非重写的计算属性添加属性观察器,因为可以通过它的setter直接监控和响应值的变化。
可以为属性添加如下的一个或者全部观察器:
1.willSet在新的值被设置之前调用
2.didSet在新值被设置之后立即调用
willSet观察器会将新的属性值作为常量参数传入,在willSet的实现代码中可以为这个参数指定一个名称,如果不指定则参数仍然可用,这个使用默认名称newValue表示。
didSet观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名oldValue。如果在didSet方法中再次对该属性赋值,那么新值会覆盖旧的值。
    class StepCounter {
        var totalSteps: Int = 0{
            willSet(newTotalSteps){
                print("\(newTotalSteps)")
            }
            didSet{
                if totalSteps > oldValue{
                    print("\(totalSteps - oldValue)")
                }
            }
        }
        
    }
        let stepCounter = StepCounter()
        stepCounter.totalSteps = 200
        stepCounter.totalSteps = 360
        stepCounter.totalSteps = 896

StepCounter类定义了一个Int类型的属性totalSteps,它是一个存储属性,包含willSet和didSet观察器。当totalSteps被设置新值的时候,它的willSet和didSet观察器都会被调用,即使新值和当前值完全相同时也会被调用。

类型属性

实例属性属于一个特定类型的实例,每创建一个实例,实例都拥有属于自己的一套属性值,实例之间的属性相互独立。也可以为类型本身定义属性,无论创建了多少个类型的实例,这些属性都只有唯一一份。这种属性就是类型属性。类型属性用于定义某个类型所有实例共享的数据,比如所有实例都能用的一个常量,或者所有实例都能访问的一个变量。存储类型属性可以是变量或者常量,计算类型属性跟实例的计算型属性一样只能定义成变量属性。
    struct SomeStructure {
        static var storedTypeProperty = "some value"
        static var computedTypeProperty: Int{
            return 1
        }
    }
    
    enum SomeEnumeration {
        static var storedTypeProperty = "some value"
        static var computedTypeProperty: Int{
            return 6
        }
    }
    
    class SomeClass {
        static var storedTypeProperty = "some value"
        static var computedTypeProperty:Int {
            return 27
        }
        class var overrideableComputedTypeProperty: Int {
            return 107
        }
    }
   print(SomeStructure.storedTypeProperty)
        print(SomeEnumeration.storedTypeProperty)
        print(SomeEnumeration.computedTypeProperty)
        print(SomeClass.computedTypeProperty)

取自《the swift programming language》中文版




























RK3568平台(内存篇)DDR定频修改 如果需要DDR定频,则还需要注释掉其他多余的DDR频率,保留一个即可,例如注释掉opp-528000000、opp-1068000000、opp-1560000000,保留opp-2750000000则是定频最大频率。如果回退必须将 dmc_opp_table节点 的其他频率打开,否则系统无法选择到其他频率运行。ddr频点不对,先把ddr变频关掉,关闭后系统就不会一直重启了,以下是修改DDR频点的。rk3588修改定频节点在rk3588s.dtsi 的 dmc: dmc。 阅读详情

相关推荐

RoboMaster电控入门:手把手教你用STM32CubeMX配置大疆C板CAN总线驱动GM6020电机

本文详细介绍了如何使用STM32CubeMX配置大疆C板CAN总线驱动GM6020电机,适用于RoboMaster电控入门。从硬件准备到CubeMX工程初始化,再到CAN过滤器配置和电机控制协议解析,手把手教你避开常见配置陷阱,实现精准控制。

weixin_42524762的博客 267

Swift之属性

Swift 属性 存储属性 存储常量或者变量的 要么给它默认值,要么在构造方法里初始化 简单来说,一个存储属性就是存储在特定类或结构体的实例里的一个常量或变量。 存储属性可以是变量存储属性(用关键字var定义),也可以是常量存储属性(用关键字let定义)。 可以在定义存储属性的时候指定默认值 也可以在构造过程中设置或修改存储属性的值,甚至修改常量存储属性的值 计算属性 计算属性不直接存储值 访问时...

m0_46311757的博客 276

在 NVIDIA Orin (JetPack 6.0) 上配置 PyTorch 2.4 + Torchvision 0.19 的完整避坑指南

本文提供在NVIDIA Jetson Orin设备上,基于JetPack 6.0系统配置PyTorch 2.4与Torchvision 0.19环境的完整指南。通过使用Miniconda环境隔离、安装特定版本PyTorch夜间构建版、编译匹配的Torchvision源码等步骤,解决版本不匹配、CUDA支持等常见问题,确保AI开发环境稳定可用。

weixin_29179311的博客 363

Swift 属性

Swift 中的属性分为存储属性、计算属性和类型属性。存储属性直接保存值,计算属性通过getter/setter动态计算。类型属性(static/class)属于类型本身,可全局访问。属性观察器(willSet/didSet)可监听存储属性变化,而lazy属性延迟初始化以优化性能。Swift 5.1+引入属性包装器,封装通用逻辑并支持投影值。最佳实践包括:简单数据用存储属性,派生值用计算属性,单例用static let,延迟加载用lazy var。属性还支持访问控制(如private(set))以保护数据安

likuoelie的博客 754

计算机考研复试面试常问问题 数据结构篇(下)

计算机考研复试面试常问问题 数据结构篇(下) 使用前需知(拒绝白嫖,如果对你有帮助,你只需点个赞就行): 注意:有人在闲鱼上盗卖我的资料,而且还有很多同学买了,请各位擦亮双眼,我是整理出来免费分享给大家的! 大家请多点赞和评论,这样后面的同学更容易百度到,不至于被人盗卖,我就不加水印影响大家使用了! 第一次整理,度不好控制,有不好的地方希望大家理解,后面可能会改进,造福今年之后的同学们! ...

程序员宝藏的博客 1万+

强化学习实战:如何用PPO算法训练一个超级马里奥AI(附完整代码)

本文提供了一份详细的强化学习实战指南,教你如何使用PPO算法训练一个能玩《超级马里奥》的AI智能体。内容涵盖从环境搭建、自定义奖励函数设计到PPO智能体的PyTorch完整实现,并附有可运行的代码,帮助开发者快速上手游戏AI开发。

h6j7k8l9p0的博客 946

Swift属性

属性概述 在Swift中,属性是类、结构体甚至枚举的组成部分。 存储型属性和计算型属性 OC中属性有两种:「普通属性」和「合成属性」,譬如对于一个UIView,center和bounds是其普通属性(是由对应的存储单元与之对应),而frame是合成属性(根据center和bounds而成而来)。在Swift中也有类似概念,只不过被称为:「存储型属性」(stored properti...

dingzhengkuang5981的博客 163

PDPS16.0单机版与SPLMLicenseServer授权避坑指南:从安装到冲突解决

本文详细解析了PDPS16.0单机版的安装与授权流程,重点阐述了如何正确配置SPLMLicenseServer本地许可证服务器以实现软件激活。针对安装过程中常见的许可证冲突问题,提供了清晰的排查思路和解决方案,并介绍了通过设置环境变量等替代授权方法,帮助用户高效避坑,确保Tecnomatix Process Simulate顺利运行。

weixin_29231221的博客 560

Swift的属性

属性分类 在Swift中, 严格意义上来讲属性可以分为两大类: 实例属性和类型属性 实例属性(Instance Property): 只能通过实例去访问的属性 存储实例属性(Stored Instance Property): 存储在市里的内存中, 每个实例都只有一份 计算实例属性(Computed Instance Property) 类型属性(Type Property): 只能通过...

挽的博客 342

C#上位机+YOLOv8实战:摄像头/视频流实时目标检测(工业级优化+完整可运行源码)

纯C#实现,无Python依赖,适配工业工控机部署;工业级优化:解决帧率、内存、鲁棒性三大核心问题;代码完整可复用,支持摄像头/视频流/RTSP多源检测;避坑指南覆盖开发中90%的常见问题,降低落地成本。相较于传统方案,该方案兼顾实时性与易用性,成本仅为商用视觉库的1/10,可快速落地到工业质检、安防、物流等场景。后续可拓展方向包括:自定义数据集训练、GPU加速推理、工业通信(PLC/串口)对接等。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 731

YOLOv8/v9 遥感图像目标检测实战指南:建筑物检测与变化监测

遥感图像在城市规划、灾害评估、农业监管等领域应用广泛,但传统目标检测方法存在效率低、精度不足、难以适配遥感图像大尺寸、多尺度目标等问题。本文以“建筑物检测与变化监测”为核心,基于DOTA、NWPU VHR-10等公开数据集,系统讲解YOLOv8/v9在遥感图像中的实战流程。从数据获取、格式转换、模型训练优化,到大图切片推理、建筑物变化监测,全程提供可复现的代码与参数配置。通过针对性优化(旋转增强、切片推理等),模型在NWPU VHR-10数据集上mAP50达0.85以上,可适配卫星影像、无人机航拍等多场景

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 519

Swift Property 属性

iOS 开发中属性是一种常用方式,在Swift中属性到底如何声明,如何延时加载(懒加载) 如何监听属性值的变化。 属性类型 Swift 中主要存在两种属性类型,存储属性和计算属性,属性可以在类,结构体 ,枚举 中存在,值得注意的是存储属性只能存在于类和结构体 属性与特定类型的实例相关,但是也存在类型属性(作用于属性本身)。 存储属性 存在于类或结构体的常量(let)和变量(var)。 延时加载 为节约空间和时间成本,我们应该避免过度初始化某些属性。lazy 对属性就行修饰。 注意: 必须将延迟属性声明称变

jeversonjee's blog 378

置顶必读(1) |《YOLOv8实战:从入门到深度优化》专栏导读,带你一文了解本专栏!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏,该专栏专注于分享我在YOLOv8目标检测模型中的实战经验,涵盖从入门基础到深度优化的全方位解决方案。无论你是计算机视觉的新手,还是具有多年深度学习经验的专家,本专栏都将为你提供高效、可复现的技术方案,助你掌握YOLOv8的核心技术,提升目标检测性能,突破瓶颈,优化模型,并加速项目开发🚀!

**My Coding Family** 14万+

Swift属性分类

转载自:http://southpeak.github.io/blog/2014/06/27/ios-swift-property/#comments Swift属性Property JUN 27TH, 2014 | COMMENTS Swift的属性与Objective-C中的属性是一样的,不同的是Swift细化了属性的类型,另外除了类之外,结构体和枚举也可以有属性。

weiqiang_huang的专栏 913

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

浅谈Swift的属性(Property)

原文博客地址: 浅谈Swift的属性(Property) 今年期待已久的Swift5.0稳定版就已经发布了, 感兴趣的小伙伴可看我的这篇博客:Swift 5.0新特性更新 这篇博客可主要分享Swift的属性的相关介绍和剖析, 测试环境: Xcode 11.2.1, Swift 5.1.2 属性分类 在Swift中, 严格意义上来讲属性可以分为两大类: 实例属性和类型属性 实例属性(Ins...

RunningKing 894

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Swift 类 / 属性

Swift 类 / 属性1. Swift 类1.1 类和结构体对比1.2 作为引用类型访问类属性1.3 恒等运算符2. Swift 属性2.1 存储属性2.2 延迟存储属性2.3 实例化变量2.4 计算属性2.5 只读计算属性2.6 属性观察器2.7 全局变量和局部变量2.8 类型属性2.9 获取和设置类型属性的值 1. Swift 类 Swift 类是构建代码所用的一种通用且灵活的构造体。 我们可以为类定义属性(常量、变量)和方法。 与其他编程语言所不同的是,Swift 并不要求你为自定义类去创建独立的接

qq_43712409的博客 2699

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[Swift]属性和下标

1. 属性的基本概念:     1)

Lirx_Tech的专栏 1748

Swift-属性

1. 存储属性 一个存储属性就是存储在特定类或结构体实例里的一个常量或变量。 可以是变量存储属性(用关键字 var 定义)。 也可以是常量存储属性(用关键字 let 定义)。 struct FixedLengthRange { var firstValue: Int let length: Int } var rangeOfThreeItems = FixedLengthRan...

hkasdfiu12 253

Swift 中的类型属性

类型属性: 使用关键字 static 来定义 结构体、枚举、类 都可以定义类型属性 (在为类定义类型属性时 可以使用关键字 class 来代替 static 关键字 ) 结构体类型属性的语法格式 struct 结构体名 { static var 存储属性 = "xxxx" static var 计算属性名 : 属性数据类型 { return 计算后的属性值 }

骑着蜗牛赛跑的博客 763
上一篇: swift 枚举
下一篇: swift 方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值