//: Playground - noun: a place where people can play
import UIKit
/*
* 本节主要内容:
* 1.结构体的基本使用
*/
// 声明: 结构体是值类型; 也是自定义类型(声明和初始化)
struct Location {
// 添加属性(var / let)
var latitude: Double
var longitude: Double
// 只包含属性, 默认有一个包含所有属性的init构造方法
}
// 实例化:
var appleLocation = Location(latitude: 37.3230, longitude: -122.0322)
var googleLocation = Location(latitude: 37.4220, longitude: -122.0841)
appleLocation.latitude
googleLocation.longitude
// 结构体赋值(值类型)
googleLocation.latitude = appleLocation.latitude
// 结构体嵌套
struct Place {
let location: Location
var name: String
}
// 实例化
var place = Place(location: appleLocation, name: "Apple Int.")
place.location
place.name
// 声明结构体时, 初始化属性的值; 默认又添加一个没有任何参数的构造init方法
struct LocationNew {
var latitude: Double = 0.0
var longitude: Double = 0.0
}
var newLocation = LocationNew()
/*
* 需求: 声明描述栈的结构体, 一个属性(存任意类型数据), 添加方法(入栈, 出栈和显示栈是否为空)
* 特点: First In Last Out先进后出
* 分析: 泛型类型语法 + 一个属性 + 三个方法
*/
struct Stack<Element> {
// 属性: 存任意类型数据
var items: [Element] = []
// 判断栈是否为空
func isEmpty() -> Bool {
return items.count == 0
// return items.isEmpty
}
// 入栈
// mutating关键词: 声明方法修改属性, 需要在方法前面添加关键词
mutating func push(item: Element) {
items.append(item)
}
// 出栈
mutating func pop() -> Element? {
// 判断数组是否为空
guard !items.isEmpty else {
return nil
}
return items.removeLast()
}
}
// 实例化:
var stack = Stack<Int>() // 数组没有任何元素
stack.push(item: 10)
stack.push(item: 20)
stack.push(item: 30)
stack.pop()
stack.isEmpty()
/*
* 课堂练习三:
* 1.需求: 使用结构体描述队列数据结构
* 2.特点: First In First Out(FIFO)先进先出
* 3.要求: 一个属性, 三个方法
*/
/** 小demo */
import UIKit
/*
* 课堂练习二
*/
enum Shape {
// 正方形
case Square(side: Double)
// 矩形
case Rectangle(width: Double, height: Double)
// 圆
case Circle(centerX: Double, centerY: Double, radius: Double)
// 点
case Point // 不关联任何类型
}
// 实例化四个形状
let square = Shape.Square(side: 10)
let rectangle = Shape.Rectangle(width: 10, height: 20)
let circle = Shape.Circle(centerX: 10.0, centerY: 20.0, radius: 10)
let point = Shape.Point
// 声明函数: 计算并返回形状的面积
func area(shape: Shape) -> Double {
switch shape {
case let .Square(side: side):
return side * side
case let .Rectangle(width: width, height: height):
return width * height
case let .Circle(centerX: _, centerY: _, radius: radius):
return M_PI * radius * radius
case .Point:
return 0
}
}
// 调用函数, 验证
area(shape: square)
area(shape: rectangle)
area(shape: circle)
area(shape: point)
Swift 系统学习 18 结构体 改变结构体里面的元素
最新推荐文章于 2024-10-07 12:59:05 发布