swift 方法

Swift - 方法派发机制 静态派发:适用于值类型、Final 类和方法,性能最高。动态派发:适用于类的继承和重写,通过虚表派发。协议派发:适用于协议方法,通过协议见证表派发。消息转发:适用于与 Objective-C 交互和动态方法解析。理解这些派发机制有助于编写高效且符合预期的 Swift 代码。 阅读详情

实例方法

实例方法是属于某个特定类、结构体或者枚举类型实例的方法。实例方法提供访问和修改实例属性的方法或者提供与实例目的相关的功能,并以此来支撑实例的功能。
下面的例子,定义一个简单的Counter类:
    class Counter {
        var count = 0
        func increment() {
            count += 1
        }
        
        func increment(by amount:Int)  {
            count += amount
        }
        
        func reset() {
            count = 0
        }
    }
   let counter = Counter()
        counter.increment()
        counter.increment(by: 5)
        counter.reset()

self属性

类型的每个实例都有一个隐含属性叫做self,self完全等同于该实例本身,可以在一个实例的实例方法中使用这个隐含的self属性来引用当前实例。
  func increment() {
            self.count += 1
        }
实际上,你不必在你的代码里面经常写self。不论何时,只要在一个方法中使用一个已知的属性或者方法名称,如果你没有明确的写self,swift假定你是指当前实例的属性或者方法。这种假定在上面的Counter中已经示范了。
使用这条规则的主要场景是实例方法的某个参数名称与实例的某个属性名称相同的时候。在这种情况下,参数名称享有优先权,并且在引用属性时必须使用一种更严格的方式。这时你可以使用self属性来区分参数名称和属性名称。
    struct Point {
        var x = 0.0, y = 0.0
        func isToTheRightOfX(x:Double) -> Bool {
            return self.x > x
        }
        
    }
    let somePoint = Point(x:4.0,y:5.0)
        if somePoint.isToTheRightOfX(x: 1.0){
            print("")
        }
如果不使用self前缀,swift就认为两次使用的x都指的是名称为x的函数参数。

在实例方法中修改值类型

结构体和枚举是值类型。默认情况下,值类型的属性不能再它的实例方法中被修改。
但是,如果你确实需要在某个特定的方法中修改结构体或者枚举的属性,可以为这个方法选择可变行为,然后可以从其方法内部改变它的属性;并且这个方法做的任何改变都会在方法执行结束时写回到原始结构中。方法还可以给它隐含的self属性赋予一个全新的实例,这个新实例在方法结束时会替换现存实例。
要使用可变方法,将关键字mutating放到方法的func关键字之前就可以了:
 struct Point {
        var x = 0.0, y = 0.0
        mutating func moveByX(deltaX:Double,y deltaY:Double){
            x += deltaX
            y += deltaY
        }
        
    }
  var somePoint = Point(x:1.0,y:1.0)
        somePoint.moveByX(deltaX: 2.0, y: 3.0)
        print("\(somePoint.x)\(somePoint.y)")
上面的Point结构体定义了一个可变方法来移动Point实例到给定的位置。该方法被调用时修改了这个点,而不是返回一个新的点。方法定义时加上了mutating关键字,从而允许修改属性。

在可变方法中给self赋值

可变方法能够赋给隐含属性self一个全新的实例。上面Point的例子可以用下面的方式改写:
    struct Point {
        var x = 0.0, y = 0.0
        mutating func moveByX(deltaX:Double,y deltaY:Double){
            self = Point(x:x + deltaX,y:y + deltaY)
        }
        
    }
枚举的可变方法可以把self设置为同一枚举类型中不同的成员:
    enum TriStateSwitch {
        case Off,Low,High
        mutating func next(){
            switch self{
            case .Off:
                self = .Low
            case .Low:
                self = .High
            case .High:
                self = .Off
            }
        }
    }
上面的例子汇总定义了一个三态开关的枚举。每次调用next()方法时,开关在不同的电源状态之间循环切换。
iOS swift调用oc的category中的方法 前面把私有库建立好了,但是在swift工程中调用库时,category中的方法调用不到。尝试了很久之后,发现category中的类方法可以调,但是实例方法不行,所以暂时解决方案是将实例方法改成类方法,将实例以参数的方式传进去。 例如: 实例方法: - (void)addMyView { UIView * view = [[UIView alloc] init]; [self addSubVie... 阅读详情

相关推荐

swift中使用OC的方法;在OC中调用swift方法

swift中使用OC的方法;在OC中调用swift方法

wj748499404的博客 5325

Swift 方法

方法是与某些特定类型相关联的函数。类、结构体、枚举都可以定义实例方法;实例方法为给定类型的实力封装了具体的任务与功能。类、结构体、枚举也可以定义类型方法;类型方法与类型本身相关联。类型方法与 Objective-C 中的类方法(class methods) 相似。结构体和枚举能够定义方法是 Swift 与 C/Objective-C 的主要区别之一。在 Objective-C 中,类是唯一能定义方法的类型。

xiaoxiaobukuang的专栏 938

10、理解Swift中方法的派发机制

10、理解Swift中方法的派发机制1、Swift中有哪些派发方法1.1 Direct Dispatch(直接派发)1.2 Table dispatch(函数表派发)2、Swift是如何使用Objective-C消息派发机制1.3 Message Dispatch(消息机制派发)3、Swift的方法派发规则3.1 值类型永远使用direct dispatch3.2 在protocol和class的定义中声明的方法使用table dispatch3.3 在protocol和class的extension中定

重楼的博客 2591

Swift 中的方法调用机制

在 iOS 开发中,Swift 和 Objective-C 是两种常用的编程语言。尽管它们都能用于开发应用程序,但在方法调用的底层机制上存在显著差异。本文将详细介绍 Swift 的方法调用机制,重点对比 Objective-C 的实现,并深入探讨虚表(V-Table)和 Witness Table 机制。

侯仕奇的博客 1524

Python之美——Python2与Python3多版本共存

Python多版本共存的方法Python2、Python3共存的方法python2下载及环境变量配置第一步、打开Python官网,下载Python2第二步、python2环境变量配置测试结果 Python2、Python3共存的方法 方法如下: 1.先确保不同版本解释器的python.exe所在的路径在环境变量中 2.拷贝各自的python.exe并重命名即可 步骤(理解不了下面有图示): 1、首先你需要将不同的python版本安装,且都已经将跟版本的环境变量配置好了,python3和2的下载方式

chenchen5152的博客 3944

UE 动态获取 资源缩略图 下载到本地或返回图片信息

UE 动态加载资源缩略图 返回图片信息或保存到本地

qq_46080252的博客 1935

swift协议方法实现_Swift中使协议方法成为可选方法的2种方法

swift协议方法实现In this article, we’ll learn about two ways to make protocol methods optional. We’ll explore the advantages and disadvantages of each approach. 在本文中,我们将学习使协议方法成为可选方法的两种方法。 我们将探讨每种方法的优缺点。 W...

weixin_26638123的博客 935

苹果开发者账号注册指南:解决Apple Developer app证件验证失败问题

本文详细解析了苹果开发者账号注册中证件验证失败的常见原因与解决方案。核心在于确保Apple ID、设备与iCloud信息一致,并提供了从官方支持联系到材料准备的全流程操作指南,帮助开发者高效解决“未能验证证件”问题,顺利完成注册。

weixin_29232507的博客 2217

swift怎么调用Java_Swift方法

本篇文章帮大家学习Swift方法,包含了Swift方法使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。在Swift 4语言中,与特定类型关联的函数称为“方法”。 在Objective C中,类用于定义方法,而Swift 4语言为用户提供了为类,结构体和枚举也提供方法,提高了灵活性。实例方法在Swift 4语言中,通过实例方法访问类,结构体和枚举实例。实例方法提供功能 -...

weixin_31967485的博客 718

[技术解析] SGDC驱动的轻量级IoT入侵检测:特征选择与模型优化的实战指南

本文深入解析了如何利用SGDC驱动的轻量级入侵检测系统保护IoT设备安全。通过实战指南,详细阐述了SGDC模型在资源受限环境下的优势,并结合特征选择技术优化模型性能,实现高效、低耗的异常流量检测,为物联网安全部署提供了一套可行的解决方案。

weixin_29192211的博客 350

Claude Code长期记忆:优雅的上下文管理

ClaudeCode的上下文管理系统采用三层架构设计,通过智能压缩和优化策略在记忆容量与性能间取得平衡。系统包含短期记忆(高速工作区)、中期记忆(智能蒸馏器)和长期记忆(持久化知识库)。当Token使用率达到92%阈值时启动wU2压缩器,采用8段式结构化摘要保留关键信息,并配合智能文件恢复和渐进式预警机制。该系统通过分层处理、优雅降级和透明化交互,为AI应用提供了高效可靠的上下文管理方案,展现了在有限资源下实现智能记忆的艺术。

m0_53117338的博客 3814

swift方法

方法定义 Methods are functions that are associated with a particular type. Classes, structures, and enumerations can all define instance methods, which encapsulate specific tasks and functionality for wor

frankisbaby的博客 363

01-SA8155 QNX 虚拟机Hypervisor

Hypervisor运行在Host OS操作系统上,其他操作系统均在Hypervisor上运行。:Hypervisor直接运行在硬件上,操作系统在Hypervisor之上运行。终止(关闭):echo control 0 dev/vmm。路径:qnx_ap/AMSS/platform/vm/resources/关闭/终止 qvm(GVM):slay -s SIGQUIT qvm。", //host PVM --- 主机。不直接操作/dev/vmm 实现关闭,启动vm。

静虚待令,有物混成 1万+

Swift 对象方法

Swift 类的方法也分对象方法和类方法,我们先简单看一下对象方法。 我们分三类来分析 我们看一个例子,创建一个学生类 Student,他有四个属性 姓名 name,年龄 age,性别 sex,知识 knowledge 我们定义三个方法 学习 1,不带参数,只要学生调用了学习方法知识+1 2,带两个参数,第一个参数subject 表示学习的课程,第二个参数表示学习的课时 3,参数同2

2002

SAP IDOC实战:如何用EDI实现跨公司采购订单自动生成销售订单(附完整配置步骤)

本文详细解析了如何利用SAP IDOC与EDI技术,实现跨公司采购订单自动生成销售订单的完整流程。通过实战案例,从业务蓝图设计、输出条件配置、伙伴参数设定到IDOC消息类型处理,提供了清晰的配置步骤与故障排查指南,帮助企业打通内部业务流,构建高效的自动化闭环。

weixin_29215815的博客 727

delphi 调用deepseek r1 api 并流式返回结果

摘要:本文展示了一个使用Delphi调用DeepSeek API的代码示例,包含两种调用方式:一次性获取结果和流式返回结果。代码实现了完整的API请求处理,包括HTTP客户端设置、JSON数据处理和UI界面交互。其中流式调用通过TStreamReader处理服务器发送事件(SSE),实时更新到TRichEdit控件并保持滚动条位置。文章还提到界面美化优化,为Delphi开发者提供了调用AI服务的实用参考方案。(150字)

全粘工程师 490

swift 中,protocol的optional方法

swift推出一年多了,断断续续学了一些,一直没有真正引入自己的项目中。 最近准备做一个 Today Extension,恰好是一个机会可以完整的使用swift开发。刚刚做了几天,就发现又一次被Apple忽悠了,感觉就像iOS6.0时代的AutoLayout,经常掉坑儿里。 尤其是swift和objc的interoperability,最简单、也是困扰我时间最长的就是protocol中的optio

wershest的专栏 7623

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

swift 引用swift_方法混乱 Swift

swift 引用swift 第一件事 (First things first) Before the explanation about Method Swizzling, it’s important to understand what is the Swift Runtime, once it’s a key concept that enables language features li...

weixin_26638123的博客 359

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Swift方法嵌套

想想看,有多少次我们因为一个方法主体内容过长,而不得不将它重够为好几个小的功能模块方法,然后在原来的主体方法中去调用这些小方法? 在Swift中,对于这种情况有了解很好的应对措施,我们可以在方法中定义其他方法,也就是说,让方法嵌套起来。 例如: func appendQuery(var url:String, key:String, value:AnyObject) -> S

逢个场,作个戏 633

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

swift php 交互,Swift 方法

Swift 方法是与某些特定类型相关联的函数在 Objective-C 中,类是唯一能定义方法的类型。但在 Swift 中,你不仅能选择是否要定义一个类/结构体/枚举,还能灵活的在你创建的类型(类/结构体/枚举)上定义方法。实例方法在 Swift 语言中,实例方法是属于某个特定类、结构体或者枚举类型实例的方法。实例方法提供以下方法:可以访问和修改实例属性提供与实例目的相关的功能实例方法要写在它所属...

weixin_39769187的博客 281

Swift类方法

/*     方法是用来描述对象所具有的动作的能力     【1】定义方式和调用方式     【2】方法的参数名命名规则     【3】self属性     【4】mutating关键字  [struck中]     对于值拷贝类型的复合类型,这里主要是结构体和枚举两类。在其对象方法中是无法对对象属性进行修改的,为了能够进行修改操作,在定义前添加mutating关键

水清_木秀的博客 742

Swift - 方法嵌套

方法终于成为了“一等公民”,也就是说,我们可以将方法当做变量或者参数来使用了。更进一步的,我们甚至可以在一个方法中定义新的方法,这给代码结构层次和访问级别的控制带来了新的选择。 想想看,有多少次我们因为一个方法主体内容过长,而不得不将他重构为好几个小的功能块方法,然后在原来的主体方法中调用这些小方法?这些具体负责一个个小功能块的方法也许“一辈子”就被调用一次,却不得不存在于整个类型的作用域中。虽然我们会将它们标记位私有方法,但是事实上它们所承担的任务往往和这个类型没有直接关系,而只会在这个类型中的某个方法中

HumorousGhost 539
上一篇: swift 属性
下一篇: swift 下标
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值