快速浏览Swift-笔记

2023-10-26

快速浏览Swift-笔记

快速浏览Swift:https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html

变量也常量

// 多行字符串,使用 “”" “”"

let quotation = """
I said "I have \(3) apples."
And then I said "I have \(3 + 4) pieces of fruit."
"""
print(quotation)

// 创建一个空数组,可变的

var array = [String]()

// 创建一个空字典,key是String类型,value是Float类型

var dictionary = [String: Float]()

// 创建一个字典,key是String类型,value是任何类型

var dictionary1 = [String: Any]()

// 字符串

var string = "hello"

// 可选类型 ?

var optionnalString: String? = "hello"

控制流

// if let

if let str = optionnalString {
    print(str)
}

// 可选类型

//let nickName: String = nil // 报错:'nil' cannot initialize specified type 'String'
let nickName: String? = nil  // 有点三目运算符的感觉,有没有有,没有的话就是nil
let fullName: String = "John"
// ?? 运算符设置默认值
let name: String = "My name is \(nickName ?? fullName)"

// Switch 支持任何类型的比较,不仅局限于整数的比较

函数与闭包

// 函数

// func 函数名(形参) -> 返回值
/**
func <#name#>(<#parameters#>) -> <#return type#> {
<#function body#>
}
*/
func person(fullName name: String, age: Int) -> String {
    return "\(name) age:\(age)"
}

// 关于形参:
// 1. 在括号()里面,多个参数的话用逗号隔开,这和大多数语言都是一样的
// 2. 冒号前面的是 形参,冒号后面空一格,之后是参数类型
// 3. 形参数前面可以加一个 “参数标签”。也可以不写,在Swift旧的版本里不写的话得需要使用“”来表示不使用任何参数标签。在Swift5中,淡化了参数标签的存在,不写,不加“”编译也不会报错

// 元组
// 使用()来定义一个元组
// 可以使用元组作为函数返回值

func calculatesStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
    var min = scores[0]
    var max = scores[0]
    var sum = 0

    for score in scores {
        if score > max {
            max = score
        } else if score < min {
            min = score
        }
        sum += score
    }
    return (min, max, sum)
}

// 函数嵌套
// 一个函数中嵌套另外一个函数的实现

// 函数作为另一个函数的返回值
// 将函数放在()中返回,看来是将函数作为元组的一个元素返回
// ((函数参数) -> 函数的返回值)

func makeIncrementer() -> ((Int) -> Int) {
    func addOne(num: Int) -> Int {
        return num+1
    }
    return addOne(num:)
}

// 函数作为参数

// 闭包

对象和类

// class 类名

class Shape {
    // 变量,可变的
    var numberOfSides = 0
    // 常量
    let sumNumbers = 100

    // 初始化
    init(sides: Int) {
        numberOfSides = sides
    }
    
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

// 创建一个shape实例

var shape = Shape()
shape.numberOfSides = 10

// 继承

class rectangle: Shape {

    var sideLength: Double
    var sidWidth: Double


    // ? init函数中不添加sideLength 和 sidWidth的话会报错?Why?
    init(sideLength: Double, sidWidth: Double, sides: Int) {
        self.sideLength = sideLength
        self.sidWidth = sidWidth
        super.init(sides: sides)
    }

    // 定义一个变量,顺便写上set和get方法
    var perimeter: Double {
        get {
            return 3.0 * sideLength
        } set {
            sideLength = newValue / 3.0   // 这里这个newValue就比较有意思了,set之后会先保存一个tep值,就是newValue吧。
        }
    }

    // willSet 和 didSet
    //
}

枚举(enum) 和 结构体(struct)

// 枚举

enum AliasAPI: Int {
    case register = 1
    case login
    case getPersonalInfo
    case updatePersionalInfo

    func API() -> String {
        switch self {
        case .register:
            return "register/v1"
        case .login:
            return "login/v1"
        case .getPersonalInfo:
            return "getPersonalInfo/v2"
        case .updatePersionalInfo:
            return "updatePersionalInfo/v2"
        }
    }
}

let api = AliasAPI.login
let apiRawValue = api.rawValue
print(apiRawValue)
let apiString = api.API()
print(apiString)


//enum APICommad: String {
//    case register
//    case login
//    case getPersonalInfo
//    case updatePersionalInfo
//}
//
//func getApi(command: APICommad) -> String {
//    return command.rawValue
//}
//let apiValue = getApi(command: .login)
//print(apiValue)


enum APICommad: String {
    case register
    case login
    case getPersonalInfo
    case updatePersionalInfo
}
let apiValue = APICommad.login
print(apiValue)

协议和扩展

// protocol
// 类,枚举和结构都可以用协议。

// 声明一个协议

protocol ActivitiseProtocol {
    var name: String { get }  // 这里不加{ get }爆红了
    var age: Int { get }
    
    mutating func eat()  // 为什么需要用mutating来修饰
    
}

class Person: ActivitiseProtocol {
    var name: String = ""
    var age: Int = 0
    var dog: Dog?
    
    func eat() {
        print("吃饭")
    }
}

class Dog: ActivitiseProtocol {
    var name: String = ""
    var age: Int = 0
    func eat() {
        print("吃狗粮")
    }
}

var dog = Dog()
dog.eat()
dog.name = "Huahua"

var p = Person()
p.eat()
p.name = "Xiaoming"
p.dog = dog


print(p.dog?.name ?? "")

错误处理

// 使用该Error协议自定义错误类型

enum XXError: Error { // 注意,这里Error是一个协议
    case parater
    case api
    case url
    case network
}

// throw抛出错误,这个和其他语言差不多

// do- catch。也和其他语言一样的

do {
    
} catch {
    
}

// try?

// defer

/// 泛型
// <> 里写一个名称,代表通用的类型 这个和C#中的泛型一样一样的,其他语言应该也有吧

func makeArray<Item>(item: Item, numberOfTimes: Int) -> [Item] {
    var result = [Item]()
    for _ in 0..<numberOfTimes {
        result.append(item)
    }
    return result
}


var myArray:[String] = makeArray(item: "value", numberOfTimes: 3)
print(myArray)
 
var myArray1:[Dog] = makeArray(item: dog, numberOfTimes: 3)
print(myArray1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速浏览Swift-笔记 的相关文章

随机推荐

  • 华为OD题目: 投篮大赛

    package com darling boot order od od9 import com sun org apache bcel internal generic IF ACMPEQ import java util 投篮大赛 知识
  • Android Studio 创建项目不自动生成BuildConfig文件

    今天在AS上新建项目发现找不到BuildConfig文件 怎么clear都不行 通过多方面查找发现原来gradle版本不同造成的 Gradle 8 0默认不生成 BuildConfig 文件 如上图 8 0版本是没有source文件夹 上图
  • 软件测试-网站测试

    按照以下六个顺序进行测试 1 黑盒测试 在测试网站时 首先应该建立状态表 第5章 把每个网页当作不同的状态 超级链接当作状态之间的连接线 完整的状态图有利于对整个任务更好地进行审视 查找具体网页缺陷的思路 文本 把网页文本当作文档对待 根据
  • 无线基本概述(二)

    1 一些参数 MAC MAC 即Medium MediaAccess Control 介质访问控制 是数据链路层的一部分 MAC地址是烧录在NetworkInterfaceCard 即网卡 简称NIC 里的 它也叫硬件地址 是由48位 即b
  • 队列的基本运算实现

    队列 queue 队列是一种先进先出 first in first out FIFO 的线性表 它只允许在表的一端 队尾 rear 插入元素 而在另一端 队头 front 删除元素 插入操作称为入队或进队 删除操作称为出队或离队 队列示意图
  • matlab读jpg有三个通道,图像为“灰度图像”

    最近用matlab读取 灰度图 jpg格式 居然有三个通道 且灰度值还不一样 那么这是为什么呢 1 灰度图 其实是 灰度图 概念的问题 并不是灰色的图片就是灰度图 正常来说灰度图是某个波段的成像 是由ccd对该波段对应波长的光线的强度感应形
  • 健康保健产品爬虫:Python爬虫获取保健品信息和用户评价

    目录 第一部分 选择目标网站 第二部分 分析网站结构和查询参数
  • 经纬恒润与辉羲智能达成战略投资与业务合作,加速产业智能化进程

    近日 经纬恒润战略投资辉羲智能 并与辉羲智能签署战略合作协议 双方将聚焦未来智慧出行 共同打造基于国产高性能SoC的自动驾驶量产解决方案 助力客户快速实现包括轻地图城市NOA在内的高阶自动驾驶功能量产落地 目前自动驾驶规模化处于全面爆发前夕
  • Nightingale滴滴夜莺监控系统入门(三)--页面功能说明

    Nightingale滴滴夜莺监控系统入门 三 功能模块 V3 4 1 用户资源中心 资产管理系统 任务执行中心 监控告警系统 监控看图 监控大盘 告警策略 部署客户端 生产环境开放服务端端口 部署客户端 这章节主要是介绍夜莺的功能使用 各
  • k8s的安装

    我这里使用vmware创建了三台虚拟机 k8s的虚拟机建议最少2核 4G内存 我的电脑配置不高采用的2核 3G的配置 安装k8s之前需要先安装docker docker的安装参考 docker的安装及使用 docker的安装和使用 骑士99
  • ubuntu16.4虚拟机开机,进入tty1命令终端,无法进入桌面问题始末

    现象 1 ubuntu虚拟机开机频繁出现error failed to start network manager 2 进入tty1 vm login 分析 1 回想到前一天编译工程 由于 lib i386 linux gnu下缺少libu
  • visual studio code导入自定义模块(pycharm中能够运行的文件,vs code报错:未找到指定模块)

    一 先看下目录结构 二 在main py中导入Utils中的模块 直接导入即可 from Utils custom event parse import CustomEventParse 三 在custom event parse py中导
  • [运维

    READS SQL DATA 是 MySQL 存储过程和函数中的一种权限修饰符 用于标识该存储过程或函数只读取数据库的数据而不修改它 这个修饰符通常用于声明存储过程或函数的权限 以告知数据库管理系统该过程或函数不会对数据库进行写操作 从而允
  • 动手学数据分析 Task5

    动手学数据分析 Task5 一 逻辑回归 二 随机森林 三 模型评估 3 1 k折交叉验证 3 2 混淆矩阵 3 3 ROC曲线 一 逻辑回归 LogisticRegression penalty l2 dual False tol 0 0
  • 如何将Zookeeper和Kafka的log4j升级到2.16

    1 删除lib下的jar文件 对于kafka lib 删除 slf4j api 1 7 25 jar slf4j log4j12 1 7 25 jar log4j 1 2 17 jar 对于zk lib 删除 log4j 1 2 17 ja
  • 毕业设计 - stm32单片机的远程WIFI密码锁 - 物联网 嵌入式

    文章目录 0 前言 1 简介 主要器件 实现效果 4 硬件设计 WIFI模块 OLED显示屏 相关原理图 硬件接线 5 软件说明 开发环境介绍 程序下载配置 设备初始化打印的信息 6 部分核心代码 7 最后 0 前言 这两年开始毕业设计和毕
  • kubernetes集群-Master节点升级-kubeadm,kubectl,kubelet升级

    kubernetes Master单节点升级 kubeadm 升级 kubelet 升级 kubectl 升级 生产环境注意事项 由于 kubeadm upgrade 不会升级 etcd 请确保已对其进行了备份 例如 您可以使用 etcdc
  • java setsession_Java Session.setServerAliveInterval方法代码示例

    import com jcraft jsch Session 导入方法依赖的package包 类 private Session startNewSession boolean acquireChannel throws JSchExcep
  • 华为od机试 Java【跳房子2】

    题目 有若干个连续的方格地板 儿童们喜欢在上面玩游戏 在这个游戏中 玩家需要在三个回合内 按照规定的步数 从第一格跳到最后一格 跳到最后的玩家有机会选择一个他们喜欢的房子 直到所有的房子都被选完 当然 游戏中最多房子的人是胜者 但游戏并不那
  • 快速浏览Swift-笔记

    快速浏览Swift 笔记 快速浏览Swift https docs swift org swift book GuidedTour GuidedTour html 变量也常量 多行字符串 使用 let quotation I said I