类(Classes)

  假设你是一个建筑师,你刚刚签了一个合同,要在一个新的小区修建20个相似的房子。在你派出建筑工队之前,你必须要画一个房子的设计图。这份设计图将会展现房子的外表和功能。把这份设计图当做模板,就能制作出20个房子各自的设计图了。
使用设计图或者模板来建造物品能够节省时间,让后期维护工作更加简单。这个原则同样适用于创建虚拟对象。在Swift中起着设计图功能的叫做类(class)。类是一个对象(object)的设计图或模板,这个模板可以反复使用来创建虚拟对象。

一个类定义了对象的属性和行为。
  属性就是对象具有的特征。属性(attributes)由properties定义,(properties也有属性的意思,所以我就用英文了,不知道该怎么翻译才不会有歧义啊),properties就是对象中的变量。一个房子的properties可能是外部颜色,街道号码,浴室的数量。
行为就是对象提供的方法。例如,方法可能是,把空调温度调整到68华氏度,打开车库的门,凯琪报警系统。
在Swift中创建你自己的类是非常简单的。如果你想为你的新房屋建设项目写一个类,它看起来会是这样:

 class House
{ }

类的名字的开头是大写英文字母,这样能让其他的开发者区分出这时一个类还是一个对象。对象和方法常常用一个小写字母开头。

属性(Properties)

  给你自定义的类增加属性和声明一个变量非常相似。你可以给你的house class增加一些属性:

 class House
{
var exteriorColor = "Brown"
var currentAirTemp =
var isGarageOpen = true
var isAlarmEnabled = false
}

  你给类增加了4个属性,每个都设置了默认值。这意味着参数没有传入新值时,从这个类中建造的房子都会有一个褐色的外表,车库的门是开启的,报警系统是关闭的,空调设置的温度是70华氏度。

方法(Methods)

你也可以给你的类增加一些方法:

 class House
{ var exteriorColor = "Brown"
var currentAirTemp =
var isGarageOpen = false
var isAlarmEnabled = false func prepareForNighttime()
{
isGarageOpen = false
isAlarmEnabled = true
currentAirTemp =
} func prepareForDaytime()
{
isGarageOpen = true
isAlarmEnabled = false
currentAirTemp =
} }

创建一个对象(Creating an Object)

  现在你已经为你的类(house class)定义了属性和方法,是时候来建造第一个房子了。为了从一个类中创建一个对象,你需要调用初始化方法(initializer method)。这个初始化方法是专门为了设置新对象而设计的。初始化方法有些像你第一次打开Mac时遇见的安装向导。

  如果你的参数有默认值,那么就没有必要写初始化方法了,Xcode会为你创建一个。初始化方法是这样写的,先写一个类的名字,然后跟上一对括号,例如:

var myHouse: House = House()

或者也可写成这样:

var myHouse = House()

不管那种方法都可以创建一个新的房子叫做myHouse

获取属性(Accessing Properties)

用点语法可以获取属性的值,点语法是可以取值或赋值的格式。点语法始于一个对象:

 var myHouse = House()

为了获取exteriorColor,先写变量名字,后面跟一个点,然后是exteriorColor

 myHouse.exteriorColor
//Brown
exeriorColor返回是字符串"Brown",因为这个属性的默认值是"Brown"。

这个简单的格式也可以用于给属性赋值,为了赋值,需要增加一个等号,然后写上新的值:

myHouse.exteriorColor = "Blue"

这样就把exeriorColor的值改成了"Blue":

 myHouse.exteriorColor = "Blue"
println(myHouse.exteriorColor)
//"Blue"

当代码把exeriorColor的值改成"Blue"后,接下来的一行打印出了房子的exeriorColor值。

方法(Methods)

  方法(Methods)是为了完成一个具体目标而组织在一起的一系列步骤。方法(Methods)和函数(functions)这两个概念非常相似。方法(Methods)是在一个类或者一个对象中,为完成一个目标组合在一起的一组步骤,而函数(functions)是为完成一个目标组合在一起的一组步骤,是独立存在的。这两个概念非常相似,成了同义词。我会经常听到人们在使用这两个单词时常常互换使用,甚至是他们想说的是一个方法,却使用了function函数这个单词。
能够编写自己的方法可以非常方便地代替一些重复的工作。如果你想写一个每天迎接造成的方法,会是这样子:

 func goodMorning ( )
{
println("Good Morning")
}

首先用func作为方法的开头,func用来声明新方法的开头,接着就是方法的名字,使用驼峰命名法命名。例如:

goodMorning( )

带参数的方法,参数的名字和类型写在括号内,传入的参数的值也就是这些括号内的变量名的值。例如:

 func goodMorning(name: String)
{
println("Good Morning \(name)")
}
//Good Morning NAME

先写参数名字,然后是冒号,冒号后面就是参数的类型,如果方法有多个参数,用逗号间隔每个参数:

 func goodMorning(name: String, day: String)
{
println("Good Morning \(name), Happy \(day)")
}
//Good Morning NAME-VARIABLE-HERE, happy DAY-VARIABLE-HERE

调用(calling)方法是指,一行可以触发方法执行的代码。调用方法非常简单,写下方法的名字后跟一对括号。及时你的括号里并没有参数,这对括号也要写上。例如,这个名字为goodNight的方法:

 func goodNight ()
{
println("Good Night")
}

调用这个方法的代码是这样的:

 goodNight()
// "Good Night"

如果你的方法有参数,但是调用的时候忘记提供参数了,你可以为这些参数设置默认值。如果在调用时没有提供参数,就会使用默认值作为执行时的变量值。是这样设置默认值的:首先在类型后面写一个等号,然后等号右边写上这个默认值。例如,下面的代码把nameday的默认值设置成“World”和“Day”:

 func goodMorning(name: String = "World", day: String = "Day")
{
println("Good Morning \(name), Happy \(day)")
}
现在,调用时忘记提供参数值,方法中打印出的信息仍然是可读的:
goodMoring()
 

返回值(Return Values)

  除了能够接收输入值,执行一系列步骤,方法(Methods)还能做更多事情,还能产生输出值。当一个方法提供了一个输出值,这个输出值叫做返回值(return value)。返回值是方法的最终结果,返回给调用者。一个返回值可以是任何类型的,不过返回值的类型必须在方法中声明:

func sum(a: Int,b: Int) -> Int
{
return a + b
}
 

  如果一个方法有返回值,必须在参数后面定义一下。返回类型(return type)是被返回来的变量的类型。为了定义返回值的类型,首先要写一个dash(英文输入法下的破折号),然后一个大于号,看起来像一个箭头,表示这个方法有返回值,剪头的右面是返回值的类型。最后,return关键词还要出现在方法中,return后面是要返回的变量。

不管方法中的代码有多少行,return表示这个方法结束了,编译器在编译方法中的代码时,遇到return就结束编译,return后面的代码就会被忽略掉:

 func calculateTip(bill: Float, percentage: Float)-> Float
{
var tip = bill * percentage
return tip
}

资源:http://www.jianshu.com/p/d11225ef6bce

 

Swift 了解(3)的更多相关文章

  1. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  2. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  3. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  4. 算法与数据结构(十七) 基数排序(Swift 3.0版)

    前面几篇博客我们已经陆陆续续的为大家介绍了7种排序方式,今天博客的主题依然与排序算法相关.今天这篇博客就来聊聊基数排序,基数排序算法是不稳定的排序算法,在排序数字较小的情况下,基数排序算法的效率还是比 ...

  5. 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...

  6. Swift enum(枚举)使用范例

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  7. swift开发新项目总结

    新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案   1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编      考虑到新项目 ...

  8. swift 中关于open ,public ,fileprivate,private ,internal,修饰的说明

    关于 swift 中的open ,public ,fileprivate,private, internal的区别 以下按照修饰关键字的访问约束范围 从约束的限定范围大到小的排序进行说明 open,p ...

  9. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  10. iOS开发系列--Swift 3.0

    概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...

随机推荐

  1. Celery的Web监控管理--Flower

    Flower是Celery的一个实时监控和管理Web界面工具,目前仍在活跃的开发之中,但已经是一个很重要的可用工具了.这是推荐使用的Celery监控工具. 1,安装依赖 pip install flo ...

  2. AT3611 Tree MST 点分治+最小生成树

    正解:点分治+最小生成树 解题报告: 传送门! 然后这题麻油翻译,,,所以这边的建议是先说下题意呢亲 所以题意大概就是说,给一棵n个节点的树,树上每个点都有个权值,然后构造一个完全图,(u,v)之间连 ...

  3. Webpack 入门(转)

    原文:https://www.runoob.com/w3cnote/webpack-tutorial.html Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将 ...

  4. 页面调用qq

    tencent://message/?uin=516999605&Site=&Menu=yes

  5. 五、Docker

    1.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker支持将软件编译成一个镜像:然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像: 运行中的这 ...

  6. IntelliJ IDEA Ultimate 下载与安装

    一.下载 Intellij IDEA Ultimate 下载链接:https://www.jetbrains.com/idea/download/#section=windows 1.进入官网点击Ul ...

  7. Python3学习之路~3.2 递归、函数式编程、高阶函数、匿名函数、嵌套函数

    1 递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. def calc(n): print(n) if int(n / 2) == 0: return n r ...

  8. 012-Future、FutureTask、CompletionService 、CompletableFuture

    一.概述 创建线程的两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果.如果需要获取执行结果,就必须通过共享变量或 ...

  9. [geos]Geometry基本的几何对象

    读取shp中的点,读取shp中的线, (1)读取shp中的多边形,修改属性字段的值. 类库版本:geos3.6.2,shapelib1.3 定义类变量: GeometryFactory::unique ...

  10. nginx配置url重写

    url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态.301重定向.浏览器定向等 rewrite 语法 在配置文件的server块中写,如: s ...