Swift 系统学习 18 结构体 改变结构体里面的元素

//: 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)











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值