SWIFT基础语法(二)
来源:互联网 发布:淘宝物流重量 虚假交易 编辑:程序博客网 时间:2024/05/21 14:46
对象和类:
- 类:使用class来创建一个类,类的名称附加在class之后,类中的属性声明和普通的变量和常量的声明是一样的,除非是在类的上下文中,方法和函数也是这么写。
class shape { var simpleOfNumber = 7 func simpleDesciription() -> string { return “the simple number is \(simpleOfNumber)” }}//通过在类名后添加圆括号来实例化,使用.来访问实例属性和方法var myShape = shape() //在类名后添加圆括号来实例化shape.simpleOfNumber = 34print(“myShape.simpleDesciription()”)//这个版本的shape类遗漏了一个重要的事情:用于在创建实例时设置类的构造器。使用init来创建这样的构造器。class NameShape { var numberOfSides: Int = 0 var name: String init(name: String) { self.name = name //通过self来区分name属性和构造器的name参数,构造器的参数如同调用函数一样,在实例化类的时候传入进来,所有属性都需要被赋值,无论在属性声明的时候,还是在构造器里,这个地方不懂。 } func simpleDescription() -> String { return "A shape with \(numberOfSides) sides." }}//子类中的方法可以通过标记override来覆盖超类中的实现,没有override,编译器会视为错误,编译器同时也会检查那些带着override却没有覆盖任何超类方法的子类方法。除了保存简单的属性,属性还有一个getter 和一个setterclass EquilateralTriangle: NameShape { var sideLength: Double = 0.0 init(sideLength: Double, name: String) { self.sideLength = sideLength super.init(name: name) numberOfSides = 3 } 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")triangle.perimetertriangle.perimeter = 9.9triangle.sideLength//如果需要对属性进行计算,但仍然需要提供在设置新值时的前置和后置的代码,可以用willSet和didSet,如下类要保证三角的边长和矩形的边长相等。类中的方法和函数有一个重要的区别,函数的参数名只在函数内部使用,但是方法的参数名在你调用方法的时候也会被使用(除了第一个参数),默认情况下,方法使用的参数和你调用方法时传递的参数同名,但是,你可以为方法的参数指定第二个名字,以供在方法内部使用。class Counter { var count: Int = 0 func incrementBy(amount: Int, numberOfTimes times: Int) -> String{ count += amount * times return "\(count)" }}var counter = Counter()print(counter.incrementBy(2, numberOfTimes: 7))
枚举、结构体
- 枚举与结构
使用enum来创建一个枚举,和类以及其他命名类型一样,枚举可以包含方法
enum Rank: Int { case Ace = 1 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King func simpleDescription() -> String { switch self { case .Ace: return "ace" case .Jack: return "jack" case .Queen: return "queen" case .King: return "king" default: return String(self.rawValue) } }}let ace = Rank.Acelet aceRawValue = ace.rawValue//在上边的示例中,枚举的原始值(raw value)类型是int,所以你只需要指定第一个原始值。其后的原始值都是按照顺序赋值的,你还可以使用字符串或者浮点数作为枚举的原始值。当枚举提供的原始值没有实际意义的时候,可以不提供。//不提供原始值的枚举enum Suit { case Spades, Hearts, Diamonds, Clubs func simpleDescription() -> String { switch self { case .Spades: return "spades" case .Hearts: return "hearts" case .Diamonds: return "diamonds" case .Clubs: return "clubs" } } func anotherSimpleDescription() -> String { switch self { case .Spades, .Clubs: return "black" case .Hearts, .Diamonds: return "red" } }}let hearts = Suit.Heartslet heartsDescription = hearts.simpleDescription()let anotherHearts = Suit.HeartsanotherHearts.anotherSimpleDescription()//上面引用hearts成员的两种方法:当给hearts常量赋值时,枚举成员suit.hearts通过全名引用,因为常量没有显示声明类型。在switch中,枚举通过.hearts引用,因为self的值是已知的。可以在值类型已知的情况下使用这种缩写。
- 结构体
通过struct创建结构体,结构体和类有很多相同的行为,包括方法和构造器。一大重要的区别是,结构体在代码中是通过拷贝来传递(值传递),而类则是引用传递。
//结构体struct Card { var rank: Rank var suit: Suit func simpleDescription() -> String { return "The \(rank.simpleDescription()) of \(suit.simpleDescription())" }}let threeOfSpades = Card(rank: .Three, suit: .Spades)let threeOfSpadesDescription = threeOfSpades.simpleDescription()//一个枚举成员的实例可以拥有一个和实例对应的关联值,同一个枚举成员的实例可以有不同关联值与其对应。你在创建实例时提供关联值,关联值和原始值的区别:同一个枚举成员的所有实例的原始值都相同,在定义枚举时提供原始值。如下代码:从服务器获取太阳升起和落下时间,服务器响应具体的信息或错误信息//创建服务器时间函数enum ServerResponse { case Result(String, String) case Error(String)}let success = ServerResponse.Result("6:00 am", "8.09 pm")let failure = ServerResponse.Error("Out of cheese.")switch success {case let .Result(sunrise, sunset): let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)"case let .Error(error): let serverResponse = "Failure....\(error)"}
0 0
- swift基础语法(二)
- SWIFT基础语法(二)
- Swift 基础语法二
- Swift基础语法预览(二)
- swift 基本语法(二)
- Swift基础语法(一)
- swift基础语法(一)
- Swift基础语法(一)
- SWIFT基础语法(三)
- swift 基础语法 (一)
- Swift专栏:第二章 Swift基础语法(二)
- Swift基础(二)
- 从零开始学swift(二)-基础语法之语法篇
- Swift基础语法(二) 面向对象编程基础
- Swift专栏:Swift基础入门(二)
- Swift语言基础(二)
- swift基础回顾 (二)
- Swift 2.0语法更新(二)
- js中不同类型作比较的规律(布尔运算)
- framelayout中fragment的切换
- 基于nand flash的文件系统的整理
- object有哪些公用方法
- linux ip限制的两种设置方式
- SWIFT基础语法(二)
- 用Direct2D和DWM来做简单的动画效果2
- SDWebImage下载
- input输入框的change事件
- View被键盘挡住时实现动态滚动View
- JavaScript实现冒泡排序、快速排序、插入排序
- 数据结构5-队列
- 制作自己的缓存池
- 图像锐化——高斯—拉普拉斯算子