Swift 编程语言 入门学习笔记(7~9)

本文介绍Swift中的枚举与结构体定义及使用方法,包括如何使用原始值进行转换,以及结构体与类之间的区别。同时,探讨了Swift中的协议与扩展功能,并深入解析泛型的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1~6链接 [url]http://liyunpeng.iteye.com/blog/2076529[/url]
[color=red]七、枚举和结构体[/color]
Swift中,使用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.toRaw())
}
}
}
let ace = Rank.Ace
let aceRawValue = ace.toRaw()

if let convertedRank = Rank.fromRaw(11) {
let threeDescription = convertedRank.simpleDescription()
}

使用toRaw和fromRaw方法来转换在原始值和枚举值,上面的例子在第一句中设置了枚举的原始值,后面的值会依次按照原始值赋值
我们也可以不给他设置原始值,直接使用枚举,代码如下
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"
}
}
}
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDescription()

在以上的这段代码里面,我们可以看到两种引用枚举值的方式,也就是在枚举内部的方法里,可以直接使用.Hearts来引用Hearts值,默认可以省去self,而在外面则需要写全部的Suit.Hearts

使用struck关键字创建结构体,结构体和类大部分是相同的,最大不同的地方是结构体在传递的时候完全是新的副本,而类则是传递的引用
更多的不同,可以参看如下博客,写的比较详细
[url]http://blog.youkuaiyun.com/supergerm/article/details/29969785[/url]
一个枚举可以在不同的实例有不同的值,例如代码如下

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)"
}


[color=red]八、协议与扩展[/color]
定义协议,使用protocol关键字,协议类似于Java中的接口interface定义,类、枚举和结构体可以采用协议,代码如下

protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
}


class SimpleClass: ExampleProtocol {
var simpleDescription: String = "A very simple class."
var anotherProperty: Int = 69105
func adjust() {
simpleDescription += " Now 100% adjusted."
}
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription

struct SimpleStructure: ExampleProtocol {
var simpleDescription: String = "A simple structure"
mutating func adjust() {
simpleDescription += " (adjusted)"
}
}
var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription

其中涉及到关键字 mutating ,这个关键字在官方文档里面解释,是当结构体或者枚举类型中的方法定义,修改self的值的时候,需要在方法定义前面加这个关键字

可以使用协议的名字来定义类型,比如如下
let protocolValue: ExampleProtocol = a
protocolValue.simpleDescription

面向对象的基本特征,这个就不用太多说了!

[color=red]九、泛型[/color]
Swift中使用角括号<>来定义泛型方法或者类型,例如代码如下

func repeat<ItemType>(item: ItemType, times: Int) -> ItemType[] {
var result = ItemType[]()
for i in 0..times {
result += item
}
return result
}
repeat("knock", 4)

以上的代码中ItemType代表泛型的类型,而参数中和返回值的ItemType,则代表传进来的泛型类型,原本是未知的,而传进来是什么则就是什么类型,类似于<T>
我们可以定义泛型给函数方法、类、枚举和结构体

// Reimplement the Swift standard library's optional type
enum OptionalValue<T> {
case None
case Some(T)
}
var possibleInteger: OptionalValue<Int> = .None
possibleInteger = .Some(100)

以上这段代码就是Swift中的Optional类型的定义,我们定义?的类型就是定义了Optional这样一种类型
我们还可以通过关键字where来给泛型里面加一些条件限制,就像在SQL中书写where条件差不多一个意思,例如代码如下

func anyCommonElements <T, U where T: Sequence, U: Sequence, T.GeneratorType.Element: Equatable, T.GeneratorType.Element == U.GeneratorType.Element> (lhs: T, rhs: U) -> Bool {
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
}
anyCommonElements([1, 2, 3], [3])

以上代码中,Equatable是实现对比的协议接口,可以通过以下代码来了解一下

struct MyStruct: Equatable {
var name = "Untitled"
}
func == (lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.name == rhs.name
}

let value1 = MyStruct()
var value2 = MyStruct()
let firstCheck = value1 == value2
// firstCheck is true

value2.name = "A New Name"
let secondCheck = value1 == value2
// secondCheck is false


那么我们就可以看出来了,要求T和U都是序列类型的,并且属性符合Equatable这个协议或者说叫实现这个接口

大体上Swift的入门语法就这么多了,后续还需要慢慢得学习,如果有不对的地方,还请大师指点修正!!
内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值