- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Swift教程之方法详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
方法是关联到一个特定类型的函数。类、结构、枚举所有可以定义实例方法,封装特定任务和功能处理给定类型的一个实例。类、结构、枚举类型还可以定义方法,相关的类型本身。类型方法类似于objective – c类方法.
结构和枚举可以定义方法swift与C和objective – C是一个重大的区别。在objective – c中,类是唯一类型可以定义方法。在swift,你可以选择是否要定义一个类,结构,或枚举,还有你定义方法类型的灵活性创造.
1、实例方法 。
实例方法是属于一个特定的类,结构或枚举实例的功能。他们支持这些实例的功能,无论是通过提供方法来访问和修改实例属性,或提供的功能与实例的目的。实例方法具有完全相同的语法功能,如功能描述 你所属的类型的打开和关闭括号内写一个实例方法。一个实例方法具有隐式访问所有其他实例方法和该类型的属性。一个实例方法只能在它所属的类的特定实例调用,它不能访问一个不存在的实例。 这里,定义了一个简单的计数器类,它可以用来计数一个动作发生的次数的示例:
。
。
counter类可以定义三个实例方法: 增量递增计数器1。 incrementBy(amount:Int)由指定的整数金额递增计数器。 重置将计数器的值重置为零。 计数类也声明了一个变量属性,统计,跟踪当前的计数器值。 你调用实例方法具有相同点语法的属性 。
。
。
本地和外部参数名称的方法 。
函数参数可以有一个本地名称(在函数体内使用)和外部名称(在调用函数时使用),所述外部参数名称。方法参数也是如此,因为方法与类型相关的函数。然而,本地名称和外部名称的默认行为是不同的函数和方法.
方法在Swift非常类似于objective – c的同行。在objective – c中,一个方法的名称在Swift通常是指使用preposition等方法的第一个参数,,或者,就像在incrementBy方法从前面的counter类的例子。使用可以被解读为一个判断的方法叫做preposition。Swift使这个方法建立命名约定易于编写通过使用一个不同的默认方法.
具体来说,Swift给第一个参数名称方法默认本地参数名称,并给出第二和后续的参数名称默认本地和外部参数名称。这个约定可以在熟悉的objective – c中调用到,并使得表达方法调用而不需要符合你的参数名称.
考虑这个替代版本的counter类,它定义了一个更复杂的形式的incrementBy方法
。
。
这有两个parameters-amount和numberOfTimes incrementBy方法。默认情况下,Swift将amount视为本地名称,但将numberOfTimes视为本地和外部名称。您调用的方法如下
。
你不需要定义一个外部参数名称为第一个参数值,因为它是明确的函数名incrementBy。然而,第二个参数是由外部参数名称进行限定。 这种默认行为有效的外部方法,如果你有numberOfTimes参数之前写了一个hash符号(#):
。
。
上面描述的默认行为在Swift写入相同的方法定义,语法类似于objective – c,可以更方便地被调用.
。
修改外部参数名称的行为方法 。
有时是有用的提供一个外部方法的第一个参数的参数名称,即使这不是默认行为。你自己可以添加一个显式的外部名称,或者你可以用一个散列前缀的名字的第一个参数标志使用本地名称作为外部的名字。 相反,如果你不想为第二个提供外部名称或后续参数的方法,覆盖默认行为通过使用下划线字符(_)作为一个明确的外部参数名称参数.
Self属性 。
一个类型的每个实例都有所谓的一个隐含self属性,它是完全等同于该实例本身。您可以使用这个隐含的self属性来引用当前实例中它自己的实例方法.
在上面的例子中,增量方法也可以写成这样:
。
在实践中,你不需要写self,这在你的代码会非常频繁。如果你没有明确写self,Swift假设你是指当前实例的属性或方法,每当你使用一个方法中一个已知的属性或方法名。这个假设是证明了里边三个实例方法的计数器使用count(rather than self.count)的。 主要的例外发生在一个实例方法的参数名称相同的名称作为该实例的属性。在这种情况下,参数名称的优先,有必要参考属性更多合格的方式。您可以使用隐式的自我属性的参数名和属性名来区分。 如果一个方法参数叫x,还有一个实例属性也叫x,在Swift中可以自动对两个x消除歧义,不会混淆.
。
。
如果没有self前缀,Swift将假定x的两种用法称为X的方法参数 。
。
修改值类型的实例方法 。
结构和枚举值类型。默认情况下,一个值类型的属性不能修改它的实例方法 然而,如果您需要修改的属性结构或枚举在一个特定的方法,你可以选择该方法的变化行为。但任何更改都会使它得编写的方法结束时回到原来的结构。当该方法结束时还可以分配一个完全新的实例对其隐含的self属性,而这个新的实例将取代现有的。 你可以选择这个行为之前将变异的关键字嵌入函数关键字的方法
。
Point结构上面定义了一个变异moveByX方法,它通过一定量移动一个Point实例。而不是返回一个新的起点,这种方法实际上会修改在其上调用点。该变异包含被添加到它的定义,使其能够修改其属性。 请注意,您不能调用变异方法结构类型的常数,因为它的属性不能改变,即使它们是可变的特性,如在固定结构实例存储的属性描述:
。
。
分配中的self变异方法 变异的方法可以分配一个全新的实例隐含的self属性。上面所示的点的例子也可以写成下面的方式来代替:
。
。
此版本的突变moveByX方法创建一个全新的结构,它的x和y值被设置到目标位置。调用该方法的结果和早期版本是完全一样的 。
。
变异的方法枚举可以设置self参数是从同一个枚举不同的成员 。
。
这个例子定义了一个三态开关枚举。三种不同的功率状态之间的切换周期(关,低,高) 。
。
2、类型方法 。
如上所述,实例方法的方法要求一个特定类型的实例。您还可以定义该类型自身的方法,这种方法被称为type方法,您显示的type方法直接在类结构体里面用class func开头 ,对于枚举和结构来说,类型方法是用static func开头。 请注意; 在objective – c中,您可以定义type-level方法仅为objective – c类。在Swift可以为所有类定义type-level方法,结构,和枚举。每种方法的显示局限于它所支持的类型。 类型方法调用dot syntax,就像实例方法。但是,您调用的是类型的方法,而不是该类型的一个实例。这里是你如何调用一个类调用SomeClass的一个类型的方法:
。
在类型方法的主体,隐含的self属性是指类型本身,而不是该类型的一个实例。对于结构体和枚举,这意味着你可以使用自助静态属性和静态方法的参数消除歧义,就像你做的实例属性和实例方法的参数.
。
更普遍的是,你一个类型的方法体中使用任何不合格的方法和属性名称会参考其他 type-level方法和属性。 一种方法可以调用另一个类的方法与其他方法的名称,而不需要与类型名称前缀了。同样,结构和枚举类型的方法可以使用静态属性的名称,没有类型名称前缀访问静态属性.
下面的例子定义了一个名为LevelTracker结构,它通过游戏的不同层次或阶段跟踪球员的进步。这是一个单人游戏,但可以存储的信息为一个单一的设备上的多个玩家.
所有的游戏的水平(除了一级)当游戏第一次玩。每当玩家完成一个级别,该级别解锁设备上的所有玩家。LevelTracker结构使用静态属性和方法来跟踪哪些级别的比赛已经解锁。它还跟踪当前个别球员水平 。
。
该LevelTracker结构跟踪任何玩家解锁的最高水平。这个值是存储在一个名为highestUnlockedLevel的静态属性.
。
LevelTracker还定义了两种类型的功能与highestUnlockedLevel,首先是一种叫做unlockLevel功能,每当一个新的水平解锁都会用来更新highestUnlockedLevel,第二个是levelIsUnlocked功能,如果一个特定的水平数已经解锁,就会返回ture。注意,这些类型的方法可以访问highestUnlockedLevel静态属性但是你需要把它写成LevelTracker.highestUnlockedLevel).
除了它的静态属性和类型的方法,LevelTracker通过游戏追踪每个玩家的进度。它使用被称为currentLevel实例属性来跟踪玩家级别。 为了帮助管理urrentLevel属性,advanceToLevel LevelTracker定义一个实例方法。这种方法更新currentLevel之前,用来检查是否要求新的水平已经解除锁定。该advanceToLevel方法返回一个布尔值来指示它是否能够设置currentLevel。 该LevelTracker结构使用Player类,如下所示,跟踪和更新单个球员的进步:
。
Player类创建LevelTracker的一个新实例来跟踪球员的进步。它也提供了一个名为completedLevel方法,每当玩家到达一个特定的级别,这种方法就会解锁一个新的级别和进度并把玩家移到下一个级别。(advanceToLevel返回的布尔值将被忽略,因为已知被调用LevelTracker.unlockLevel。) 您可以创建一个新球员Player 的实例,看看当玩家完成一个级别会发生什么:
。
。
如果你创建第二个球员,你想尝试移动到尚未被游戏解锁的级别,就会出现当前级别失败 。
。
。
最后此篇关于Swift教程之方法详解的文章就讲到这里了,如果你想了解更多关于Swift教程之方法详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在做一个关于代码学院的教程,我在这里收到一个错误,说“看起来你的函数没有返回‘唉,你没有资格获得信用卡。资本主义就是这样残酷。’”当收入参数为 75 时。”但是该字符串在控制台中返回(由于某种原因
我正在阅读 Go 的官方教程,但很难理解 Channel 和 Buffered Channels 之间的区别。教程的链接是 https://tour.golang.org/concurrency/2和
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
作为 iOS 新手,有大量书籍可以满足学习基础知识的需求。现在,我想转向一些高级阅读,例如 OAuth 和 SQLite 以及动态 API 派生的 TableView 等。您可以推荐任何资源吗? 最佳
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 年前。
前言 很多同学都知道,我们常见的CTF赛事除了解题赛之外,还有一种赛制叫AWD赛制。在这种赛制下,我们战队会拿到一个或多个服务器。服务器的连接方式通常是SSH链接,并且可能一个战队可能会同时有
Memcached是一个自由开源的,高性能,分布式内存键值对缓存系统 Memcached 是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象),这些数据可以是数据库调用、A
Perl 又名实用报表提取语言, 是 Practical Extraction and Report Language 的缩写 Perl 是由 拉里·沃尔(Larry Wall)于19
WSDL 是 Web Services Description Language 的缩写,翻译成中文就是网络服务描述语言 WSDL 是一门基于 XML 的语言,用于描述 Web Services 以
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我正在寻找解释在 WPF 中创建自定义用户控件的教程。 我想要一个控件,它结合了一个文本 block 、一个文本框和一个启动通用文件打开对话框的按钮。我已经完成了布局,一切都连接好了。它有效,但它是三
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我接近 fourth page of the Django tutorial 的开始看着vote查看,最后是这样的: # Always return an HttpResponseRedirect a
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
是否有任何好的 Qt QSS 教程,或者在某个地方我可以看到样式小部件的示例?如果某处可用,我想要一些完整的引用。除了有关如何设置按钮或某些选项卡样式的小教程外,我找不到任何其他内容。 最佳答案 Qt
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!