swift学习笔记(5)-控制流

Swift教程_零基础学习Swift完整实例(二)_swift基础(简单值、控制流、方法和闭包) 三、Swift基础介绍 本章将对Swift做一个简单说明,内容取自《The Swift Programming Language》及http://www.chinaz.com/swift/的中文翻译,并加之自己的理解。 首先swift全局作用域中的代码会被自动当做程序的入口点,所以你也不需要main函数。你同样不需要在每个语句结尾写上分号。而且提供了playground可以在编辑代码实 阅读详情

For-In 循环

for index in 1...5 {
    print("\(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25

如果你不需要区间序列内每一项的值,你可以使用下划线(_)替代变量名来忽略这个值:

let base = 3
let power = 10
var answer = 1
for _ in 1...power {
    answer *= base
}
print("\(base) to the power of \(power) is \(answer)")
// 输出 "3 to the power of 10 is 59049"

在for-in循环中使用显式的常量名称来解读(key, value)元组。

let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
    print("\(animalName)s have \(legCount) legs")
}
// ants have 6 legs
// cats have 4 legs
// spiders have 8 legs

while循环

while condition {  
    statements
}
repeat {
    statements
} while condition

和oc的do-while一样的

if条件语句

temperatureInFahrenheit = 90
if temperatureInFahrenheit <= 32 {
    print("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= 86 {
    print("It's really warm. Don't forget to wear sunscreen.")
} else {
    print("It's not that cold. Wear a t-shirt.")
}
// 输出 "It's really warm. Don't forget to wear sunscreen."

Switch

switch语句必须是完备的。这就是说,每一个可能的值都必须至少有一个 case 分支与之对应。在某些不可能涵盖所有值的情况下,你可以使用默认(default)分支来涵盖其它所有没有对应的值,这个默认分支必须在switch语句的最后面。
不存在隐式的贯穿

与 C 和 Objective-C 中的switch语句不同,在 Swift 中,当匹配的 case 分支中的代码执行完毕后,程序会终止switch语句,而不会继续执行下一个 case 分支。这也就是说,不需要在 case 分支中显式地使用break语句。这使得switch语句更安全、更易用,也避免了因忘记写break语句而产生的错误。但是break仍然可用。

let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a": // 无效,这个分支下面没有语句
case "A":
    print("The letter A")
default:
    print("Not the letter A")
}
// 这段代码会报编译错误

不像 C 语言里的switch语句,在 Swift 中,switch语句不会一起匹配”a”和”A”。相反的,上面的代码会引起编译期错误:case “a”: 不包含任何可执行语句——这就避免了意外地从一个 case 分支贯穿到另外一个,使得代码更安全、也更直观。

为了让单个case同时匹配a和A,可以将这个两个值组合成一个复合匹配,并且用逗号分开:

let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a", "A":
    print("The letter A")
default:
    print("Not the letter A")
}
// 输出 "The letter A

区间匹配

case 分支的模式也可以是一个值的区间。下面的例子展示了如何使用区间匹配来输出任意数字对应的自然语言格式:

let approximateCount = 62
let countedThings = "moons orbiting Saturn"
var naturalCount: String
switch approximateCount {
case 0:
    naturalCount = "no"
case 1..<5:
    naturalCount = "a few"
case 5..<12:
    naturalCount = "several"
case 12..<100:
    naturalCount = "dozens of"
case 100..<1000:
    naturalCount = "hundreds of"
default:
    naturalCount = "many"
}
print("There are \(naturalCount) \(countedThings).")
// 输出 "There are dozens of moons orbiting Saturn."

元组

我们可以使用元组在同一个switch语句中测试多个值。元组中的元素可以是值,也可以是区间。另外,使用下划线(_)来匹配所有可能的值。

下面的例子展示了如何使用一个(Int, Int)类型的元组来分类下图中的点(x, y):

let somePoint = (1, 1)
switch somePoint {
case (0, 0):
    print("(0, 0) is at the origin")
case (_, 0):
    print("(\(somePoint.0), 0) is on the x-axis")
case (0, _):
    print("(0, \(somePoint.1)) is on the y-axis")
case (-2...2, -2...2):
    print("(\(somePoint.0), \(somePoint.1)) is inside the box")
default:
    print("(\(somePoint.0), \(somePoint.1)) is outside of the box")
}
// 输出 "(1, 1) is inside the box"

值绑定

case 分支允许将匹配的值绑定到一个临时的常量或变量,并且在case分支体内使用 —— 这种行为被称为值绑定,因为匹配的值在case分支体内,与临时的常量或变量绑定。

下面的例子展示了如何在一个(Int, Int)类型的元组中使用值绑定来分类下图中的点(x, y):

let anotherPoint = (2, 0)
switch anotherPoint {
case (let x, 0):
    print("on the x-axis with an x value of \(x)")
case (0, let y):
    print("on the y-axis with a y value of \(y)")
case let (x, y):
    print("somewhere else at (\(x), \(y))")
}
// 输出 "on the x-axis with an x value of 2"

Where

case 分支的模式可以使用where语句来判断额外的条件。

let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
    print("(\(x), \(y)) is on the line x == y")
case let (x, y) where x == -y:
    print("(\(x), \(y)) is on the line x == -y")
case let (x, y):
    print("(\(x), \(y)) is just some arbitrary point")
}
// 输出 "(1, -1) is on the line x == -y"

控制转移语句

控制转移语句改变你代码的执行顺序,通过它可以实现代码的跳转。Swift 有五种控制转移语句:

  • continue
  • break
  • fallthrough
  • return
  • throw

贯穿

Swift 中的switch不会从上一个 case 分支落入到下一个 case 分支中。相反,只要第一个匹配到的 case 分支完成了它需要执行的语句,整个switch代码块完成了它的执行。
如果你确实需要 C 风格的贯穿的特性,你可以在每个需要该特性的 case 分支中使用fallthrough关键字。下面的例子使用fallthrough来创建一个数字的描述语句。

let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
    description += " a prime number, and also"
    fallthrough
default:
    description += " an integer."
}
print(description)
// 输出 "The number 5 is a prime number, and also an integer."

fallthrough关键字不会检查它下一个将会落入执行的 case 中的匹配条件。fallthrough简单地使代码继续连接到下一个 case 中的代码,这和 C 语言标准中的switch语句特性是一样的。

带标签的语句

label name: while condition { statements }
gameLoop: while square != finalSquare {
    diceRoll += 1
    if diceRoll == 7 { diceRoll = 1 }
    switch square + diceRoll {
    case finalSquare:
        // 骰子数刚好使玩家移动到最终的方格里,游戏结束。
        break gameLoop
    case let newSquare where newSquare > finalSquare:
        // 骰子数将会使玩家的移动超出最后的方格,那么这种移动是不合法的,玩家需要重新掷骰子
        continue gameLoop
    default:
        // 合法移动,做正常的处理
        square += diceRoll
        square += board[square]
    }
}
print("Game over!")

如果上述的break语句没有使用gameLoop标签,那么它将会中断switch语句而不是while循环。使用gameLoop标签清晰的表明了break想要中断的是哪个代码块。 同时请注意,当调用continue gameLoop去跳转到下一次循环迭代时,这里使用gameLoop标签并不是严格必须的。因为在这个游戏中,只有一个循环体,所以continue语句会影响到哪个循环体是没有歧义的。然而,continue语句使用gameLoop标签也是没有危害的。这样做符合标签的使用规则,同时参照旁边的break gameLoop,能够使游戏的逻辑更加清晰和易于理解。

提前退出

像if语句一样,guard的执行取决于一个表达式的布尔值。我们可以使用guard语句来要求条件必须为真时,以执行guard语句后的代码。不同于if语句,一个guard语句总是有一个else从句,如果条件不为真则执行else从句中的代码。

func greet(person: [String: String]) {
    guard let name = person["name"] else {
        return
    }
    print("Hello \(name)")
    guard let location = person["location"] else {
        print("I hope the weather is nice near you.")
        return
    }
    print("I hope the weather is nice in \(location).")
}
greet(["name": "John"])
// 输出 "Hello John!"
// 输出 "I hope the weather is nice near you."
greet(["name": "Jane", "location": "Cupertino"])
// 输出 "Hello Jane!"
// 输出 "I hope the weather is nice in Cupertino."

如果条件不被满足,在else分支上的代码就会被执行。这个分支必须转移控制以退出guard语句出现的代码段。它可以用控制转移语句如return,break,continue或者throw做这件事,或者调用一个不返回的方法或函数,例如fatalError()。

检测 API 可用性

我们在if或guard语句中使用可用性条件(availability condition)去有条件的执行一段代码,来在运行时判断调用的API是否可用。编译器使用从可用性条件语句中获取的信息去验证,在这个代码块中调用的 API 是否可用。

if #available(iOS 10, macOS 10.12, *) {
    // 在 iOS 使用 iOS 10 的 API, 在 macOS 使用 macOS 10.12 的 API
} else {
    // 使用先前版本的 iOS 和 macOS 的 API
}

以上可用性条件指定,在iOS中,if语句的代码块仅仅在 iOS 10 及更高的系统下运行;在 macOS中,仅在 macOS 10.12 及更高才会运行。最后一个参数,*,是必须的,用于指定在所有其它平台中,如果版本号高于你的设备指定的最低版本,if语句的代码块将会运行。

在它一般的形式中,可用性条件使用了一个平台名字和版本的列表。平台名字可以是iOS,macOS,watchOS和tvOS——请访问声明属性来获取完整列表。除了指定像 iOS 8的主板本号,我们可以指定像iOS 8.3 以及 macOS 10.10.3的子版本号。

if #available(platform name version, ..., *) {
    APIs 可用,语句将执行
} else {
    APIs 不可用,语句将不执行
}
UE5实战:如何用Mesh Shader优化你的游戏场景渲染(附性能对比) 本文深入探讨了在UE5中利用Mesh Shader优化游戏场景渲染的实战方法。通过对比传统渲染管线与GPU Driven Pipeline,详细阐述了Mesh Shader如何通过任务着色器和网格着色器两阶段并行处理,实现更精细的meshlet级剔除,从而显著降低Draw Call和GPU带宽,提升渲染性能。文章附有具体的性能对比数据与代码示例,为开发者优化高复杂度场景提供了有效路径。 阅读详情

相关推荐

RPG MV游戏数据修改指南:从JSON解析到脚本进阶

游戏数据修改是游戏开发与逆向工程中的常见实践,其核心原理在于解析和操作游戏资源文件。许多现代游戏引擎采用结构化数据格式(如JSON)存储游戏配置,这为外部修改提供了可能。通过理解文件结构、数据格式与游戏逻辑的关联,开发者或爱好者可以调整游戏平衡、修复问题或实现个性化定制,这不仅能深化对游戏设计机制的理解,也具备实际的技术学习价值。本文以基于Web技术栈的RPG Maker MV(RPG MV)引擎为例,其游戏数据多以明文JSON存储,结构清晰。文章将具体阐述如何安全地修改角色属性、物品效果、敌人数据及技能公

weixin_29001419的博客 403

Swift苹果官方教程文档阅读和学习

入门文档 Guide Book:https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html Swift Feature: https://developer.apple.com/swift/ 问题记录 Swift Feature 值类型 And Swift heavily leverages value types, especially for commonly used types like Arrays and Diction

mingC0758的博客 1981

火车头采集器超级详细图文使用指导(面向新手)

火车采集器·超级详细使用指导

DE的个人原创笔记 1万+

Swift 控制流

Swift 提供了多种流程控制结构,包括可以多次执行任务的while循环,基于特定条件选择执行不同代码分支的ifguard和Switch语句,还有控制流程跳转到其他代码位置的break和continue语句。Swift 还提供了for-in循环,用来更简单地遍历数组(Array),字典(Dictionary),区间(Range),字符串(String)和其他序列类型。Swift 的Switch语句比许多类C语言要更加强大。case还可以匹配很多不同的模式,包括范围匹配,元组(tuple。

xiaoxiaobukuang的专栏 1132

帕德伯恩大学轴承数据集(PU)介绍

PU数据集介绍一、帕德伯恩大学轴承数据集故障类别说明二、关于损伤描述2.1 损伤组合:2.2 重复和多重损伤的安排:2.3 几何尺寸2.4 损伤程度2.5损伤特征数据集损伤类别三、人为损坏轴承3.1 最常用的人为损伤制造方法是:3.2 本数据集使用的人工损坏是由三种不同方法引起的四、通过加速寿命试验产生真正的轴承损坏样本 一、帕德伯恩大学轴承数据集 数据集下载地址 从帕德伯恩大学获得的PU数据集是一个6203轴承数据集,包括人为诱发的和真实的损害。采用压电加速度计采集轴承座的振动信号,采样频率为64 kHz

m0_47180208的博客 3万+

Lm317电压源芯片制作电流源

还在找电流源芯片么?如何使用电压源芯片快速搭建电流源。

Ekko的博客 1万+

iOS开发之Swift篇(5)—— 控制流

目录版本控制流for-inswitch检测API可用性 版本 Xcode 11.0 Swift 5.1 控制流 类似于其他语言, Switch中控制流关键字有: if guard while repeat-while for for-in switch 注: guard 的执行取决于一个表达式的布尔值, 类似于 if, 表过不提; repeat-while 类似于 do-while. 控制...

看影成痴 389

逆向分析PerimeterX px3:从混淆JS到生成有效令牌的完整实战

在Web安全与数据采集领域,反自动化防护是保障服务稳定和数据安全的关键技术。其核心原理是通过收集浏览器环境指纹和用户行为特征,动态生成加密令牌来区分真人用户与自动化脚本。这项技术的工程价值在于平衡安全性与用户体验,广泛应用于电商、金融、社交等需要防止恶意爬虫和自动化攻击的场景。本文聚焦于业界广泛部署的PerimeterX px3防护方案,通过JavaScript逆向工程,深入剖析其令牌生成机制。我们将探讨如何运用动态调试、反混淆工具和算法还原等关键技术,突破px3的防护壁垒,为自动化测试和数据采集提供稳定可

diankui6178的博客 522

Swift学习笔记笔记(二)Swift运算符&控制流

在实验中,我主要会因为自己的粗心大意,方法使用不恰当导致运行结果出现误差,检查出错误后,基本所有的实验结果都可以正常运行出来,特别需要注意的是,Swift默认禁止值溢出,但可使用溢出符号选择溢出行为: a &+ b,另外+可用于String进行连接即可。注意:在大多数语言中,switch 语句块中,case 要紧跟 break,否则 case 之后的语句会顺序运行,而在 Swift 语言中,默认是不会执行下去的,switch 也会终止。通过本次的学习,我了解到Swift支持大多数标准C运算符,并有所改进。

个人博客地址https://sun98k.github.io/ 676

微信小程序消息推送实战:从模板消息到订阅消息的进阶指南

本文详细解析了微信小程序消息推送的核心机制,重点对比了模板消息与订阅消息的差异与应用场景。模板消息适用于支付成功等强即时性业务回执,而订阅消息则需用户授权,更适合物流提醒等可预期通知。文章提供了从授权、配置到发送的完整实战指南,并分享了常见的避坑技巧与性能优化建议,帮助开发者构建高效、合规的用户触达体系。

weixin_29231027的博客 593

基于YOLOv8的MVTec AD缺陷检测系统设计与实现

速度快,精度高;支持 anchor-free 架构;支持实例分割和图像分类;模块化代码,易于部署与改进;完美兼容 ONNX、TensorRT 等推理框架;官方支持多平台训练和推理(CPU/GPU)。YOLOv8 是工业视觉检测落地非常理想的选择。MVTec AD(Anomaly Detection)数据集包括15类工业对象,每个对象包括多个子类缺陷(例如 “scratch”, “crack”, “hole”)及正常图像。类别缺陷子类bottlecablecapsule。

YOLO 931

Swift学习笔记

通过学习 Swift 语言的基础语法、控制流和函数等内容,我们可以开始编写简单的程序。随着学习的深入,我们还可以探索更多高级的主题,如面向对象编程、协议、泛型等。[学习Swift 途径]1.网络“0 基础入门 Swift” 博客:从最基础的 Swift 语法讲起,逐步深入到更复杂的概念和技术,还通过解析和演示实际开发中的案例,帮助读者理解应用场景,并且提供练习题和项目任务,鼓励动手实践,同时分享有用的外部资源及建立学习社区。

2402_88115203的博客 2009

YOLO26改进 - 注意力机制 | ParNet并行子网络:多分支协同优化特征表达,增强模型判别能

本文介绍了ParNet注意力机制及其在YOLO26中的应用。ParNet注意力通过并行子网络结构,将网络层组织成多个子网络并行处理输入特征,降低了传统注意力机制在处理长序列时的计算复杂度。该机制采用VGG风格的块和特征融合策略,具有低深度高性能、参数效率高、可扩展性强和并行化能力好等创新点。我们将ParNet注意力引入YOLO26,在检测头部分应用该机制。通过实验训练改进后的模型,有望提升YOLO26在目标检测任务中的性能。

魔改工程师的博客 443

swift 7. 控制流

swift 7 控制流标签(空格分隔): swift之前说完了swift中的基本数据结构,基本语法,以及字符串、数组、字典,今天看了下貌似又过去好久没有跟新swift了,罪过啊。今天开始跟新下。争取过年回家前全部学完。今天来说下swift中比较重要,当然也是比较简单的控制流。啥是控制流,控制流就是if else switch case while do 还有swif里面特殊且很有用的for-in 等

domorejojo 896

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

一篇入门swift的学习笔记

文章目录1. 读后概述2. 部分语法梳理2.1 说明2.2 基础类型2.3 运算符2.4 字符与字符串2.4 控制流2.5 函数2.6 闭包2.7 枚举、结构体、类2.8 类的构造与析构2.9 属性监听器2.10 类的继承2.11 访问控制2.12 扩展与协议2.10 泛型3. 总结 1. 读后概述 阅读完《the swift programming language 中文版》,对swift语言有了初步的认识。在特点是:swift既是项目开发的编程语言,又有脚本语言的特点;在学习上:swift可以在xcod

走过路过不要错过 9450

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Swift 基础之控制流

Swift 提供了类似 C 语言的流程控制结构,包括可以多次执行任务的 for 和 while 循环,基于特定条件选择执行不同代码分支的 if 和 switch 语句,还有控制流程跳转到其他代码的 break 和 continue 语句。 除了 C 里面传统的 for 条件递增循环,Swift 还增加了 for-in 循环,用来更简单地遍历数 组(array),字典(dictionary),范围(...

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 2749

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

iOS Swift No.5 - 控制流 - 控制转移语句

第五章 控制流 3. Control Transfer Statements (控制转移语句) 控制转移语句将会更改执行代码时的顺序。将会把一段代码的控制权转移到另一段代码,swift语言一共有五种控制转移语句。continue,break,fallthrough,return,throw。五种语句其中return将会写在函数相关章节里,throw在错误处理章节里面简单介绍过了。 Contin...

Hello Swift ! 496

Swift 控制流(笔记)

/***************************** 控制流 Control Flow ***************************/ /** *  For 循环 *  While 循环 *  条件语句 *  控制转换语句 (Control Transfer Statements) *  提前退出 *  检测 API

蒋昉霖的博客 406

跟着洲洲哥一块学习Swift-控制流

今天给大家介绍控制流,也就是控制语句了。比如if,for,switch,do…while…下面就开始介绍了for 循环在Swift中的使用。普通循环 For-In 你可以使用 for-in 循环来遍历一个集合里面的所有元素,例如由数字表示的范围、数组中的元素、字符串中的字符。循环遍历1到10之间的数字// 循环语句 for index in 1...10 { print("\(index)")...

whuizhou的专栏 620

5.Swift-控制流

Swift提供了类似C语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行不同代码分支的if和switch语句,还有控制流程跳转到其他代码的break和continue语句。 Swift 的 switch 语句比 C 语言中更加强大。在 C 语言中,如果某个 case 不小心漏写了 break,这个 case 就会“掉入”下一个 case,Swift 无需写 b

Code_Ninja 1165

swift5 for

学习 Swift 5 的 for 循环 在这篇文章中,我们将学习如何在 Swift 5 中使用 for 循环。这是一个编程中的基本概念,对于刚入行的小白来说,掌握这一点将帮助你更好地理解控制流和迭代。我们将通过以下步骤逐步引导你: 整体流程 在实现 for 循环之前,我们需要了解一些基本的步骤。下面是一个流程表,详细列出了...

weixin_40348302的博客 213

Swift-控制流

1. For in 循环 遍历一个集合中的所有元素。 例如:数组中的元素、范围内的数字或者字符串中的字符。 遍历一个数组所有元素: let names = ["Anna", "Alex", "Brian", "Jack"] for name in names { print("Hello, \(name)!") } // Hello, Anna! // Hello, Alex! // ...

hkasdfiu12 343

百度网盘macOS破解:三分钟解锁SVIP标识与满速下载

一个 9.23GB 的游戏客户端,速度卡在 100KB/s,剩余时间"超过1天"——这是没开会员的你在百度网盘 macOS 客户端里最常见的画面。BaiduNetdiskPlugin-macOS 是一个面向 macOS 版百度网盘的开源插件:往客户端里注入一个动态库,把本地 SVIP 显示打开、解除客户端自身的下载限速、并把极速下载试用倒计时永久定在 8 秒。整个安装只需几分钟,下面直接走流程。

gitblog_00798的博客 769

Swift learning part 5 - 控制流

控制流For-In 循环While 循环WhileRepeat-While条件语句IfSwitch不存在隐式的贯穿区间匹配元组值绑定(Value Bindings)Where复合匹配控制转移语句ContinueBreak循环语句中的 breakSwitch 语句中的 break贯穿(Fallthrough)带标签的语句提前退出检测 API 可用性 Swift 提供了多种流程控制结构,包括可以多次执...

毛毛虫 1656

Swift编程六(控制流)

案例代码下载 控制流 Swift提供了各种控制流程语句。这些包括多次执行任务的while循环; if,guard和switch基于特定条件执行不同代码分支的语句; 和如break和continue对执行流在代码中转移到另一个点的语句。 Swift还提供了for- in循环,可以很容易地遍历数组,字典,范围,字符串和其它序列。 Swift的switch声明比许多类C语言中的声明强大得多。案例可以匹配...

jiuchabaikaishui的专栏 414

Swift 5 Cheatsheet 使用教程

Swift 5 Cheatsheet 是一个开源项目,旨在为 Swift 5 提供一个便捷的代码示例和简短解释的备忘录。本项目非常适合初学者 iOS 开发者,通过这个备忘录,开发者可以快速学习和复习 Swift 语言的基本语法和常用功能。 ## 2. 项目快速启动 要使用 Swift 5 Cheatsheet,您可以按照以下步骤快速启动: 首先,克隆或下载项目到本地: ```shell g

gitblog_00820的博客 852
上一篇: swift学习笔记(4)-集合类型
下一篇: swift学习笔记(6)-函数
winterLiao
博客等级 码龄10年 5粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值