A Swift Tour(4) - Objects and Classes
Objects and Classes(对象和类)
用 class 关键字后面跟一个类名来创建一个class,在一个类中声明 常亮或变量,他存在于当前类的上下文,函数的方法是同样的
var numberOfSides =
let numberOfSidesLet = func simpleDescription() -> String
{
return "A shape with \(numberOfSides) \(numberOfSidesLet) sides."
}
通过括号的方式来创建一个类实例,使用点语法来访问该实例的属性和方法
var shape = Shape()
shape.numberOfSides=
var str = shape.simpleDescription()
println(str)
吐槽一下,不知道是xcode6 bate版本问题还是什么原因,写代码的提示功能特别差
这个版本的一个重要的修改:在创建的时候设置初始值的项,使用init来创建,如下:
class Shape { var name:String init(name:String)
{
self.name = name
} var numberOfSides =
let numberOfSidesLet = func simpleDescription() -> String
{
return "A shape with \(numberOfSides) \(numberOfSidesLet) sides."
}
}
请注意 self 关键字用来区分 属性name 和 参数 name(这个和oc中的还是一样)
如果你要释放一些对象,那么需要创建一个deinitializer,使用deinit来释放资源
子类和父类之间用 冒号分开,在继承标准的子类时,不需要声明,所以可以根据需要来忽略或者包括父类
子类重写父类的方法要使用overside关键字(C#,Java比较相似),如果没有重载,则会提示错误
class Square: Shape { var sideLength: Double init(sideLength:Double,name:String)
{
self.sideLength = sideLength
super.init(name:name)
numberOfSides =
} func area() -> Double
{
return sideLength * sideLength
} override func simpleDescription() -> String
{
return "A square with sides of length \(sideLength)"
}
} var square = Square(sideLength:10.1,name:"my test")
square.area()
var str = square.simpleDescription()
println(str)
除了简单的属性,属性也可以有getter 和 setter方法
class EquilateralTriangle: Shape { var sideLength:Double = 0.0 init(sideLength:Double,name:String)
{
self.sideLength = sideLength
super.init(name:name)
numberOfSides=
} var perimeter:Double
{
get{
return 3.0*sideLength
}
set
{
sideLength = newValue/3.0
}
} override func simpleDescription()->String
{
return "An equilateral triagle with sides of length \(sideLength)"
}
}
var triangle = EquilateralTriangle(sideLength:3.1,name:"a triangle")
println(triangle.perimeter)
triangle.perimeter = 9.9
println(triangle.sideLength)
在perimeter的setter方法中,新值得隐式名称是newValue,你可以在setter之后提供一个名字
初始化EquilateralTriangle类有三步:
1. 设置属性的值
2. 调用父类的构造方法(init)
3. 改变父类定义的属性值,其他的方法也可以在这里设置
如果你不需要计算属性,但是在setter之前或者之后执行,可以使用willSet和didSet,例如:下面的类永远保证三角形的边长等于正方形的边长
class TriangleAndSquare { var triangle:EquilateralTriangle
{
willSet
{
square.sideLength = newValue.sideLength
}
} var square:Square
{
willSet
{
triangle.sideLength = newValue.sideLength
}
} init(size:Double,name:String)
{
square = Square(sideLength:size,name:name)
triangle = EquilateralTriangle(sideLength:size,name:name)
}
} var triangleAndSquare = TriangleAndSquare(size:,name:"ray test shape")
println(triangleAndSquare.square.sideLength)
println(triangleAndSquare.triangle.sideLength)
triangleAndSquare.square = Square(sideLength:,name:"larger square")
println(triangleAndSquare.triangle.sideLength)
println(triangleAndSquare.square.sideLength)
//打印出来的值为:10.0,10.0,50.0,50.0
函数和方法有一个不同点,函数的参数名只能在函数中使用,but parameters names in methods are also used when you call the method (except for the first parameter). By default, a method has the same name for its parameters when you call it and within the method itself. You can specify a second name, which is used inside the method(这个不知道怎么翻译)
class Counter { var count:Int =
func incrementBy(amount:Int,numberOfTimes times:Int)
{
count += amount*times
}
}
var counter = Counter()
counter.incrementBy(,numberOfTimes:)
当使用可选值时,可以像方法属性一样在操作符前使用问号(?),如果值本来就是nil,那所有在?之后的代码将会忽略,整个表达式都是nil,Otherwise, the optional value is unwrapped, and everything after the ? acts on the unwrapped value. In both cases, the value of the whole expression is an optional value.
let optionalSquare :Square?=Square(sideLength:2.5,name:"optional square")
let sideLength = optionalSquare?.sideLength //注意:等号和optionalSquare之间必须有空格,不知道编译器为什么会这样
A Swift Tour(4) - Objects and Classes的更多相关文章
- 【读书笔记】A Swift Tour
素材:A Swift Tour 推荐下载Playground:Download Playground objc 自己较为熟悉,想熟悉下风头正劲的 swift.就先从官方的入门手册开始撸. 每一小节,我 ...
- 冷市攻略:Listo 教你 25 今天的社会 Swift 语言 - 02 Swift Tour
import Foundation //******************************************************************************** ...
- [IOS]《A Swift Tour》翻译(一)
以下翻译内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3768936.html 碎碎念... Swift是苹果在WWDC刚发 ...
- Swift tour
输出函数: print(“hello world!") 无需引入函数库,无须使用“;”作为语句结尾,也无须写跟其它语言一样的main()函数,Swift中,全局区的代码就是程序入口.You ...
- A Swift Tour(3) - Functions and Closures
Functions and Closures 使用func来声明函数,通过括号参数列表的方式来调用函数,用 --> 来分割函数的返回类型,参数名和类型,例如: func greet(name: ...
- A swift Tour
传统的认为,一个新的语言的第一个应用程序都会打印"Hellow,Word",在Swift中,可以只需要一行代码: pringln("Hello, word") ...
- Swift学习——A Swift Tour 函数
Functions and Closures 函数和封闭性(闭包) Functions 函数的使用 Swift中的函数定义和OC中有明显的差别了,使用func定义函数,在括号里定义參数和类型,用 ...
- Swift学习——A Swift Tour 协议和扩展
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/28854395 Protocols an ...
- [Swift A] - A Swift Tour
首先说下自己对Swift语言的一点点看法,对于一个写过javascript和常年写java代码的人来说,学习Swift是一件很简单的事情.就像某某人说过,每个人都有弱点和优点,我到目前为止,只是初步的 ...
随机推荐
- (转载)CentOS: 开放80、22、3306端口操作
(转载)http://blog.sina.com.cn/s/blog_3eba8f1c0100tsox.html #/sbin/iptables -I INPUT -p tcp --dport 80 ...
- haproxy配置直接重定向url
在邮件列表看到有个人问haproxy能否在接到一个请求时选择一个后端服务器,然后301重定向url .主要原因是他有5个1G的出口,这样就能充分利用其带宽.测试了一下是可以的 frontend fre ...
- javascript 关于cookie的操作
<script language=javascript> //获得coolie 的值 function cookie(name){ var cookieArray=document.coo ...
- 【原创】LoadRunner Java Vuser开发环境配置指南
1 编写目的 本文主要介绍Java运行环境的配置,同时通过编写HelloWorld程序,讲解在LoadRunner下如何开发简单的Java Vuser脚本.关于Java语言的深入学习,大家可以参考其他 ...
- 【翻译】Selenium IDE v1.0.11 支持转换格式吗?
原文: http://blog.reallysimplethoughts.com/2011/06/10/does-selenium-ide-v1-0-11-support-changing-forma ...
- C#中属性简写原理
1. 属性简写时不能只有get或者set 原因: 如果只有get,那么没有办法给其赋值,所有也就没法get到值: 如果只有set,没有意义,因为根本没法获取到这个值.
- 韦东山yy公开课笔记(2)--各种杂的问题
1. 编译器的版本和glibc库有对应关系吗,如何查看glibc的版本(glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc),编译器是不是只带glibc被编译生成的 . ...
- 韦东山yy公开课笔记(1)--各种杂的问题
1,第四期的智能猫眼会有打电话和发短信的功能吗? 答:会有打电话功能,硬件上支持打电话就会支持发短信,只是软件上是否实现发短信现在未定.因为短信延迟太严重,不是可靠的. 2,请问关于makefil ...
- WCF入门到精通(二)——契约
第一次接触WCF,如有写的不对的地方有望大家指出来,谢谢!! 本篇文章主要说下WCF中的契约的种类.契约的种类.如何定义契约等内容. 契约是一种双边或多边的协议,是利益相关方就某个问题达成的一种共识, ...
- 【原创】一个复制本地文件到Hadoop文件系统的实例
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net ...