超越Objective-C,超越Swift

Swift项目兼容Objective-c问题汇总 Swift项目需要使用封装好的Objective-c组件、第三方类库,苹果提供的解决方案能够处理日常大部分需求,但还不能称之为完美,混编过程中会遇到很多问题。本文将Swift兼容Objective-c的问题汇总,以帮助大家更好的使用Swift 阅读详情

当苹果在发布iOS 4向我们介绍ARC时,我接触iOS开发还不到一年。不过即便在如此短的时间里,我也经常挣扎于内存的手动管理(保留和释放),因此我立刻就理解了ARC的重要性。我将永远不会忘记transition guide documentation中的模型:

arc_transition.png

它完美的描述了ARC能带来的好处。ARC并不是通过语法细节和压缩的表达式的方式让代码变短,而是在工程中移除相关的整块代码,它们原本易于出错,而现在被隐藏到实现细节当中,对开发者几乎是不可见的,开发者也无需操心它们。

ARC是这么的棒,以至于听上去甚至有些不太真实。事实上,直到今天仍然有些地方的内存管理需要手动操作,但在大多数地方ARC就像魔法一样神奇——特别是对那些在ARC出现之前编写iOS应用程序的人来说。

进步是冒犯的

在引入ARC的头几年,资深iOS开发者能够引以自豪的一点,是他对于旧式编程风格的掌握程度。使用ARC,在他们看起来并不是真正的 Objective-C编程。他们说:“瞧瞧那些使用ARC的小孩儿们。”不过这种态度没有持续多长时间,在苹果将OS X过渡到ARC之后,对ARC的非议统统消失了。

软件开发技术的进步,对于被取代的技术的那些从业者来说,无疑是冒犯的。在他们眼中,新的技术和自己掌握的相比,简直简单到幼稚。即使这么概括起来 可能太笼统,我认为这种反应是很自然的。当你对你做的事非常有激情的时候,你会不知不觉的爱上工作对象和它的特质,即使事实上它可能过于累赘。

软件开发技术的进步来源于抽象。对于通常的开发场景来说,低层级基础设施的最佳实践是被编码、自动化、以及优化的,开发者甚至无需感知到它们。但正 是这个抽象和简化,它们是冒犯旧风格拥趸的元凶。新技术能自动处理之前需要重重计划和努力才能完成的任务,当然前提是新技术工作正常,但没有人希望看到他 们的专长变得没用了——直到他们意识到,他们眼中很简单的抽象,其实是搭建更高一层复杂事物的积木,而这种复杂事物在之前是无法使用旧的工具完成的。

上面的这种进步,是我希望从Objective-C替代品中获得的东西,但是我并没有从Swift得到它们。

对Swift的失望

许多人已经是Swift的忠实粉丝,其他人要么心情矛盾,要么充满怀疑,要么就是干脆反对。我把我自己放到心情矛盾的那一组里。我还没有清楚的表达过我的想法和感受,现在我准备说一下了。

Swift有许多招人喜爱的地方。我尤其喜欢枚举类型、字符串处理,和Playground REPL。Swift显然是在深入仔细的思考之后设计出来的,但即使如此,仍然无法改变我的失望的感觉。如果用一句话来描述就是:

Swift解决的问题我并不拥有,而我最关心的问题Swift并没有解决。

为何创造出Swift语言这个问题,让我们以苹果的Swift官方主页的权威指南作为答案。下面是苹果列出的Swift几项特性(它们不包含Objective-C已经有的特性,比如自动内存管理)

类型推断(Inferred types) – 类型推断让代码更清晰以及更少的错误

模块(Modules) – 模块移除了头文件并提供命名空间

闭包和函数(Closures & Functions) – 闭包和函数指针相匹配

元组(Tuples) – 元组和多重返回值

泛型(Generics) – 泛型带来的好处是不言而喻的。

结构体(Structs) – 支持方法、扩展、接口的结构体。

函数式编程模式(Functional Programming Patterns) – 比如map和filter。

这些都是在Objective-C基础上显而易见的改进。让我们将关于泛型的好处、类型推断、函数式编程等等的争论放到一边,干脆的同意Swift在许多地方比Objective-C要优越。

那为什么我还是失望呢?我对Swift的失望的原因,是因为上面的清单里所有的事物都是迭代式的改进,没有一个特性直面了我作为开发者的最大挑战。为了解释原因,下面我先描述我工作的方式,然后再回到Swift上来。

我的工作方式:空气编程

我按照一种我称为“空气编程(coding in the air)”的方式来构建我所有的软件程序。它开始于一个富有成效的合作——与我在Streamweaver和Riposte的同事Jamin Guy一起。我们会坐在Jamin的客厅,开始讨论架构的具体内容。有时这种交流会持续5到6个小时,在这期间我们不会去碰键盘。我们会在头脑中创建并分解API,连珠炮似的反复讨论需要的类名、属性清单以及方法签名,每一次都会有些小小的不同。我们会不断地说同一个词直到口干舌燥,直到最后正确的模式自 然的浮现出来。

在这些交流的结尾,我们脑海中的程序的实现方法是如此清晰,让实际写代码的过程变成了单纯的打字而已。

使用这种方法开发程序需要无比集中的注意力,但它值得这么做——特别是当你拥有一个志趣相投的合作者的时候,它将最大程度上发挥合作者的好处。与一 般开发需要不被打扰的连续时间块用来编程相比,空气编程没有任何实质上的消耗。当一个想法不能实现的时候,它自然消失了,没有代码需要重写,也没有文件需要删除。

空气编程让你的关注点从实现细节转移到架构上。在任何项目中,架构总是最难也是最重要的部分。它需要花费最多的时间来实现,也是需要最多的时间来重新实现的地方——当你被早期糟糕的假设逼入困境,你将不得不重写它们。空气编程减少了你需要重新实现架构的风险。

具体实现是瓶颈

最终当启动Xcode的时机到来时,整个项目的实现已经在我脑海里非常清楚了。但这才是我在本文中的问题真正开始的地方。我所参与的每一个项目都有一些部分需要重写相同的实现,但这部分代码是不能重用的,比如:

数据库与持久化 – FMDB和Core Data这种框架是能够重用的,但真正使用这些框架的类并不如此。这些类总是需要编写从框架中插入、更新,以及获取项目特定的对象的代码。另外还需要编写 其他的类来为这些对象提供唯一化和执行的缓存。如果你需要table views在滚动完成后才显示挂起的改变,你需要不同于NSFetchedResultsController的类库来管理这些变化。你的app和数据之 间也需要model controller层作为中间层提供服务,这部分也是需要重写的。更别提处理多线程数据库连接、迁移以及合并了。

JSON和RESTful API – 网络连接工具如NSURLSession和AFNetworking是可重用的,但使用它们的类不是如此。数据必须转换成字典格式、然后字典被转换成对 象。在这个过程当中的每一步都充斥着潜在错误,这些错误需要被安全的捕捉、响应,并且传播到程序的顶层。同样的复杂性存在于截然相反的过程当中,比如发送 本地数据到远程API。

触发器和响应 – 触发响应的事件,必须被绑定到项目特定的控件上。KVO呢,当使用正确时,会涉及到大量的模板。通知呢,必须被发送,并且需要附加正确的用户信息。并且任 何需要这些通知的地方都必须编写观察对象。如果你在使用KVO或通知时犯了一个错误,程序可能会崩溃。甚至很多时候,程序就是不工作,而静态检查也不会报 错。你最大的希望是设置UI Automation的集成测试并且祈祷你的应用设计不会太多的超出测试之外。ReactiveCocoa作为一个第三方方案来解决这些实现问题,至少它的勇气值得称赞。

UI布局 – 不管你使用springs & struts或者AutoLayout,每种方法都需要你明确相关视图如何排列。你需要花大量的时间编写和修正这些排列,特别是现在有这么多设备需要适配 的情况下。没有什么是自动写好的,UI布局依赖于对细节的不断调整。那种感觉就像教导一个蒙住眼睛的人如何开飞机,而每个app都是一个新飞机。

这些只是我们在编写Objective-C程序时需要面对的耗时任务的其中一部分。它们需要花费长时间来进行调优,并且涉及到大量重复性和蛮力性的 工作。这些任务会耗尽有限的资源:程序员的时间,而这些时间是一个初创企业账单上最大的花费项。对于企业来说,这些任务就像精神和物理上的双重税收。它们 让开发者难以保持关注最核心的问题:如何创造一个用户喜欢的东西。

回到Swift

Swift没有减少开发程序时我们在那些样板代码里花费的时间和精力。甚至如果我们分解Swift的陡峭的学习曲线,我们会发现它仅仅只是将运行时 的调试转移到编译时,所以只是看上去入门简单了。它解决了Objective-C里的一些通常的实现错误,但并没有让程序更快的实现。说Swift让程序 员更轻松就像说iOS 8 Extensions让iPad更易用了——这是Federico Viticci说iOS 8改进了他的工作流的说法,可能extension的确让事情更直观了,但整个工作流还是一样复杂。

对于Swift,从搜索引擎得到的结果将会是这样:Objective-C开发者将花费接下来的数年时间以过渡到Swift的语法和功能当中。不过,即使过渡结束了,我们还是会和2014年一样,花费长时间编写关于持久化、网络、触发器和响应,以及布局的具体实现代码,这些代码也还是会和以前一样 无聊、容易出bug、并且无法重用。

我想要的

如果我们用从算盘到穿孔卡片再到Objective-C的全局眼光来看,Swift不过是Objective-C的一个迭代改进。也许有一天 Swift会成为我想看到的那种语言,为一些我想要的解决方案做支撑,但目前来说它还不太够格。不管它将如何演进,这里是一些我希望看到的东西:

自动持久化 – 我再也不想思考如何实现持久化了。在我的想法里,将模型对象直接扔到一个bucket里,然后它就能自动的对数据进行存储、缓存、合并以及唯一化。我应当关注于描述对象间的属性和联系,以及我希望它们分组的方式。其他的实现细节都应该是不可见的。

自动RESTful API – 一旦我给程序发出指令,将一个API响应对应到一个数据对象,网络和JSON转换应该被自动完成。我只想关注如何将JSON中那些项目展示给用户。

有表现力的触发器和响应 – 我想用源于响应意图(Intent)的语法来描述事件的响应和触发器,我不关心它们间的连接是如何实现的,并且这些连接也不应该在重构时出错。

所见即所得的UI编辑 – 我不想关心视图层级背后的数字计算,就像Disney动画家只用铅笔画出关键帧,然后将它们交给实习大军来补完,我只想在少数edge case的时候手动定位视图,而让Xcode处理所有的具体实现,这才是真正的AutoLayout。

我想象中的Objective-C的继承者,它要能够像之前ARC在内存管理所做的一样,从整体上移除复杂的架构来简化应用开发。我知道我所要求的超出了一个编程语言的范围,但这是因为,阻碍Objective-C开发最大的问题不在于语言本身,我们需要的不是一个新的Objective-C,我们需要的是一种新的开发范式。

原文地址:http://www.cocoachina.com/ios/20141029/10062.html


优雅的开发Swift和Objective C混编的Framework 前言为什么要写这样一篇文章,因为昨天和一个朋友讨论到Swift和Objective C如何混合开发Framework,中途发现了很多有意思的坑。用Swift封住哪个OC的库是一件比较常见的事情,毕竟对于大多数公司来说,老的代码都是用OC写的,而且经过多次迭代,这些OC的代码已经被验证了是稳定的,用Swift重写代价太大。这就引入了一个需求: 用Swift和OC来混编一个Framework。 如果你之 阅读详情

相关推荐

Swift和Objective-C互相调用

在Swift 中使用Objective-C 官方文档 桥接文件 桥接文件是一个在Swift中调用OC类或方法的通道。Swift在同模块内文件是可以相互调用的(不能模块之间调用是需要引入模块的),但是OC文件是需要引入头文件才能使用。 在Swift中首次创建OC文件的时候,xcode会弹出一个窗口,询问是否要创建桥接文件。桥接文件默认的命名为 “项目名-Bridging-Header.h”。只需要将OC 的头文件在桥接文件中#import一下就可以在Swift中使用。 如果在询问是否创建桥接文件的时候,没

我的专栏 2450

Swift和Objective-C的相同点和不同点

Swift和Objective-C的联系 Swift与Objective-C共用同一套运行时环境我们编写程序,让程序运行起来,被机器执行的代码并非全部是由我们自己来编写的。需要同时运行很多预先写好的支持性的代码,才能让我们自己的代码运行起来。程序并非单独存在的,运行时处在一定的环境当中。我总联想到很多小蚂蚁在泥土上面爬,而我自己写的程序只是其中的一只。Swift跟Objective-C编译出的程序代

学到老 3800

51单片机自动浇花系统:稳定、低功耗、易教学的工程实践方案

自动浇花系统是嵌入式入门与物联网边缘控制的经典应用场景,其核心在于土壤湿度感知、执行机构驱动与低功耗闭环控制。基于模拟信号调理、继电器开关时序、滞环状态机等基础原理,系统需兼顾测量精度、抗干扰能力与长期运行可靠性。STC89C52RC等51单片机凭借资源精简、无依赖启动、强抗扰性等特点,在小批量落地与教学实践中展现出比STM32或树莓派更优的工程鲁棒性;配合HX711高精度ADC调理与YL-69土壤传感器,可实现±1.2%湿度稳定度。本文聚焦硬件选型依据、Keil C51裸机编程、电源隔离设计及典型故障硬核

weixin_34198762的博客 235

Swift 5 时代的机遇与挑战到底在哪里?

作者|刘镇夫(小鱼) 出品|阿里巴巴新零售淘系技术部 本文是知名 ios 开发者 NSHipster中文译者-刘镇夫(小鱼),在云栖大会上为大家带来的分享,本文主要介绍几点,第一、Swift 5 代表什么?第二、Swift 5 在社区中应用的情况和我们真实开发环境中是什么样的过程和现状?第三、在实际开发中我们应该怎样面对 Swift 5 的决定性因素?第四、基于上面三个话题的讨论结果来看在...

阿里云云栖号 1435

MATLAB实战:5步搞定铣削稳定性叶瓣图(附完整代码解析)

本文提供了一份基于MATLAB的铣削稳定性叶瓣图实战指南。通过5个清晰步骤,从动力学原理出发,详细解析了利用半离散法构建稳定性判据、模块化代码设计、高效参数扫描及高级可视化的完整流程,并附有完整代码,帮助工程师快速预测和规避加工颤振,优化铣削工艺参数。

weixin_29197051的博客 194

VSCode 1.85便携版安装与配置:解决远程服务器glibc版本过低报错的保姆级指南

本文详细介绍了如何通过VSCode 1.85便携版解决远程服务器glibc版本过低导致的兼容性问题。通过环境隔离和版本固化的方法,开发者可以在老旧服务器上稳定运行Remote-SSH插件,同时保留主力VSCode的配置。文章提供了从下载安装到深度配置的完整指南,帮助用户快速搭建稳定的开发环境。

weixin_30279315的博客 576

TIOBE 3 月编程语言:Swift 一路低走,Java 份额大跌

Swift 持续下跌,Java 虽保持第二,但其市场份额降幅瞩目。整理 | 郑丽媛出品 | 优快云(ID:优快云news)编程语言社区 TIOBE 最新发布了 3 月编程语言排行榜。本...

sinat_32849897的博客 200

最新首发——boss直聘爬虫

本文介绍了使用Python开发Boss直聘爬虫的核心思路和技术要点。通过模拟浏览器访问搜索页面获取Cookie,然后构建API请求获取职位数据。关键步骤包括:1)使用DrissionPage库初始化浏览器;2)模拟用户浏览行为获取必要参数;3)设置完整的请求头信息;4)通过POST请求获取JSON格式的职位数据。文章提供了详细的代码实现,包括浏览器模拟、API请求构建、数据处理等核心功能模块,并强调了最新版接口改为POST访问的特点。该爬虫可自动翻页采集数据并保存为Excel文件,适用于安全实习等职位信息的

2301_79735033的博客 3317

苹果宣传使用Swift开发的第三方App 以及大学开设Swift课程

随着苹果新品发布会结束,我们迎来了新iPad、Mac家族更新、OS X Yosemite正式版、iTunes 12.01等,相比较起来,另一个不太起眼的发布是,苹果在其官方网站发布了一个mini站点(http://www.apple.com/swift/),宣传使用Swift开发的第三方App以及部分大学开设Swift课程。 在页面中苹果表示,开发者已经开始利用Swift开发应用:

hong1595的专栏 1322

Cursor AI编程工具保姆级安装指南:从下载到中文界面设置(含免费额度说明)

本文提供Cursor AI编程工具的保姆级安装与设置教程。详细指导从官网下载、安装到中文界面切换的每一步,并重点说明其每月500次高级模型调用的免费额度策略。通过个性化设置与核心插件推荐,帮助开发者快速上手,提升AI辅助编程效率。

weixin_29191761的博客 671

CVPR 2024 LaTeX 模板实战:从匿名提交到图表排版的避坑指南

本文详细解析CVPR 2024 LaTeX模板的使用技巧,涵盖匿名提交设置、pdfLaTeX编译器选择、图表排版优化等关键环节。通过实战案例演示智能引用、公式编号、三线表制作等专业技巧,帮助研究者高效完成论文格式规范,规避常见排版错误。特别针对双栏格式下的图片定位、跨栏表格等复杂场景提供解决方案。

weixin_42561040的博客 453

C在语言流行度调查中挑战Java

根据2019年11月的Tiobe索引,在成为Tiobe编程语言受欢迎程度索引的领导者近五年之后,Java现在几乎陷入了僵局.C仅落后Java百分之一。 尽管Java仍以16.246%的评分排名第一,但C以16.037%的比例紧随其后,相差仅0.209个百分点。 Tiobe认为,由于C在物联网开发中的使用,其运势呈上升趋势。 该公司推测,到今年年底,C可能会排名第一。 自2015年4月以来,...

cxu0262的博客 100

MAX96724解串器拨码配置实战:从COAX/GMSL2模式到IIC地址设定

本文详细解析了MAX96724解串器的拨码配置方法,涵盖电源管理模式、I2C地址设定及COAX/GMSL2视频传输模式。通过实战案例和故障排查技巧,帮助工程师快速掌握xcDeserializer4.0版本的配置要点,避免常见错误,提升车载摄像头和工业视觉系统的调试效率。

weixin_29243279的博客 576

现在是放弃 Object-C 使用 Swift 的最好时机

各位亲爱的iOS与OS X应用程序开发人员,如今正是将编程阵地转移至更为亲民、功能更为全面的Swift的最佳时机。 一般而言,编程语言往往不会轻易消亡,不过由相关厂商大力推动的更新换代举措则不在此列。如果大家从事移动设备应用程序开发工作,但却还没体验过Swift,那请注意啦:Swift不仅仅是一种希望在Mac、iPhone、iPad、Apple Watch以及其它未来设备上取代Objecti

b274619176的博客 2972

盘点那些好用的SAP FIORI App(二) -上传凭证Upload Journal Entry

SAP FICO运维问题及解决方案分享

lijinbao171022的博客 1542

KEPServerEX物联网网关(IoT Gateway)REST客户端代理(非原创)

(中文版)资料来源于【OPC-KEPServerEX学习KEPWare交流】905485143群的【455196383】【零下一度】 一。KEPServerEX物联网网关REST客户端代理演示 在KSE中,首先构建一个带有通道/设备/标签的模拟器系统。 例如,下面是三个随机项目。 直接到IoT网关插件,添加新代理。 从类型列表中选择REST Client。 终结点...

-雲飛兄-博客 5806

Swift编程语言

Swift 是苹果推出的编程语言,专门针对 OS X 和 iOS 的应用开发。Swift 在各个方面优于 Objective-C,也不会有那么多复杂的符号和表达式。同时,Swift 更加快速、便利、高效、安全。除此之外,新的 Swift 语言依旧会与 Object-C 相兼容。

2301_82244214的博客 169

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Swift与OC相比有什么优势?

1. 性能碾压: 静态派发+值类型使算法快2.6倍(苹果实测),对象创建提速1.8倍 2. 革命性安全: 编译时空安全(?拦截nil崩溃,Objective-C主要错误源) 边界检查防缓冲区溢出 3. 开发效率飞跃: 精简50%+样板代码(去分号/方括号) Playground实时调试+原生async/await并发 4. 未来生态: 苹果新框架(SwiftUI/ARKit)独占支持 跨平台扩展(服务端/Android/WebAssembly)

chenzimin_blog 990

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Swift vs. Objective-C:未来看好 Swift 的十个理由

Swift vs. Objective-C:未来看好Swift 的十个理由 是时候使用易入手又全面的Swif语言为iOS和mac OS X做应用开发了。 虽然编程语言不会那么容易消逝,但坚持衰落范例的开发小组正在这么做。如果你正为移动设备开发应用程序,并且你还没有研究Swift,那么注意:当Swift涉及到Mac、iPhone、ipad、Ap...

weixin_30292843的博客 657

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

swift论坛正式上线

www.iswifting.com swift论坛正式上线,有问答专区,也有技术分享区,还有学习资料区,大家一起学习成长!

刚刚在线 1189

[翻译]Swift编程语言——关于Swift

The Swift Programming Language (Swift编程语言)翻译系列之一

技术杂货铺 1064

为什么苹果Swift语言将会迅速普及

网易科技讯 7月15日消息,据国外媒体报道,《连线》杂志日前撰文解析了苹果新编程语言Swift的诸多优势。文章表示,由于这门语言易于上手,吸收了编译型语言与解释型语言的长处,而且有诸多苹果产品为依托,Swift的普及速度会让其他语言望尘莫及。 以下为《连线》“苹果Swift将很快改变编程的三大理由”一文: 克里斯·拉特纳(Chris Lattner)花了一年半时间打造了一套新的编程语言

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 1487

Mac Mouse Fix深度解析:如何通过开源代码打造超越苹果触控板的鼠标体验

你是否曾为Mac上鼠标功能的局限性感到困扰?当苹果用户享受着触控板流畅的手势操作时,鼠标用户却只能使用最基本的点击和滚动功能。Mac Mouse Fix的出现彻底改变了这一局面——这个开源项目让任何普通鼠标都能拥有媲美甚至超越苹果触控板的操作体验。 ## 项目架构深度剖析:从事件拦截到手势模拟 Mac Mouse Fix的核心价值在于其精巧的系统架构设计。不同于简单的快捷键映射工具,它采用了多

gitblog_00587的博客 415

Swift在TIOBE编程语言排行榜上超过了Objective-C

随着Swift在去年12月份开源,这门语言自2014年首次宣布以来的迅猛发展势头仍在继续。在开源公告发布之前,Swift在2015年11月就在TIOBE编程语言排行榜的表格里爬升到了第15名的位置,就在Objective-C(苹果用于iOS和OSX开发的主要语言)的下面。然而,Objective-C到现在已经有几十年了,在苹果生态系统之外没有任何重大的应用。虽然在过去这些年中有一些小的变化,但这些...

cpongo5 180

目前最新swift版本_Swift介绍以及对比Objective-C的优势

从事IT行业的人来说,听到Swift时,可能会想到iOS或MacOS的应用程序开发。对于喜欢深度学习,那么你一定听说过Swift for Tensorflow(S4TF)。其实它也可以做后台开发。简述Swift 是一种支持多编程范式和编译式的开源编程语言,一门通用编程语言,苹果于2014年WWDC(苹果开发者大会)发布,当时主要用于开发 iOS,OS X 和 watchOS 应用程序。目前可以做后...

weixin_39735247的博客 4085
上一篇: GCD 深入理解(二)
下一篇: iOS开发----CMDeviceMotion
「已注销」
博客等级 码龄12年 28粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值