SWIFT基础语法(二)

释放双眼,带上耳机,听听看~!

SWIFT基础语法 (一)

SWIFT基础语法 (二)

 

对象和类:

  • 类:使用class来创建一个类,类的名称附加在class之后,类中的属性声明和普通的变量和常量的声明是一样的,除非是在类的上下文中,方法和函数也是这么写。
class shape {
var simpleOfNumber = 7
func simpleDesciription() -> string {
return “the simple number is (simpleOfNumber)”
}
}
//通过在类名后添加圆括号来实例化,使用.来访问实例属性和方法
var myShape = shape()  //在类名后添加圆括号来实例化
shape.simpleOfNumber = 34
print(“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 和一个setter
class 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.perimeter
triangle.perimeter = 9.9
triangle.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.Ace
let 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.Hearts
let heartsDescription = hearts.simpleDescription()
let anotherHearts = Suit.Hearts
anotherHearts.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)"
}

 

人已赞赏
iOS文章

SWIFT基础语法 (一)

2020-5-5 14:48:15

iOS文章

iOS开发编译出现提示:ld: 7 duplicate symbols for architecture i386

2020-5-5 16:03:05

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索