ios客户端学习笔记(三):学习Swift的设计模式

Flutter学习笔记-与原生(iOS swift)交互 需求描述:需要从原生工程里面获取到设备的唯一标识,然后传到flutter模块里面去。 基本原理:Flutter使用了一个灵活的系统,允许您调用特定平台的API,无论在Android上的Java或Kotlin代码中,还是iOS上的ObjectiveC或Swift代码中均可用。Flutter平台特定的API支持不依赖于代码生成,而是依赖于灵活的消息传递的方式: 应用的Flutter部分通过平台通道(platform channel)将消息发送到其应用程序的所在的宿主(iOS或Android)。 宿主监听的平台 阅读详情

设计模式是指在软件开发中常用的一些解决问题的方法和思想,它可以帮助你更好地组织代码和提高代码的可维护性。你需要学习常见的设计模式,如MVC、MVVM、单例模式、工厂模式等,在开发应用程序时应用它们。

当你学习常见的设计模式时,可以参考以下设计模式的定义和具体实例:

1. MVC模式(Model-View-Controller)

MVC模式是一种常用的设计模式,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据和业务逻辑,视图负责显示数据和用户交互,控制器负责协调模型和视图之间的交互。

MVC(Model-View-Controller)模式示例代码:

// Model
class User {
    var name: String
    var age: Int
    
   init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

// View
class UserView {
    func displayUser(user: User) {
        print("Name: \(user.name), Age: \(user.age)")
    }
}

// Controller
class UserController {
    let user: User
    let userView: UserView
    
   init(user: User, userView: UserView) {
        self.user = user
        self.userView = userView
    }
    
   func updateUser(name: String, age: Int) {
        user.name = name
        user.age = age
        userView.displayUser(user: user)
    }
}

// Usage
let user = User(name: "John", age: 30)
let userView = UserView()
let userController = UserController(user: user, userView: userView)

userController.updateUser(name: "Jane", age: 25)

具体实例:在iOS开发中,你可以使用MVC模式来构建应用程序的数据模型和逻辑结构。比如,在一个简单的计算器应用程序中,你可以使用MVC模式将计算逻辑放在模型中,将显示逻辑放在视图中,将用户交互放在控制器中。

以下是一个简单的计算器应用程序的MVC模式代码示例:

// Model
class Calculator {
    var result: Double = 0
    
   func add(number1: Double, number2: Double) {
        result = number1 + number2
    }
    
   func subtract(number1: Double, number2: Double) {
        result = number1 - number2
    }
   func multiply(number1: Double, number2: Double) {
        result = number1 * number2
    }
   func divide(number1: Double, number2: Double) {
        if number2 != 0 {
            result = number1 / number2
        } else {
            result = 0
        }
    }
}

// View
class CalculatorView {
    func displayResult(result: Double) {
        print("Result: \(result)")
    }
}

// Controller
class CalculatorController {
    let calculator: Calculator
    let calculatorView: CalculatorView
    
   init(calculator: Calculator, calculatorView: CalculatorView) {
        self.calculator = calculator
        self.calculatorView = calculatorView
    }
        func add(number1: Double, number2: Double) {
        calculator.add(number1: number1, number2: number2)
        calculatorView.displayResult(result: calculator.result)
    }
    
   func subtract(number1: Double, number2: Double) {
        calculator.subtract(number1: number1, number2: number2)
        calculatorView.displayResult(result: calculator.result)
    }
        func multiply(number1: Double, number2: Double) {
        calculator.multiply(number1: number1, number2: number2)
        calculatorView.displayResult(result: calculator.result)
    }
    
   func divide(number1: Double, number2: Double) {
        calculator.divide(number1: number1, number2: number2)
        calculatorView.displayResult(result: calculator.result)
    }
}

// Usage
let calculator = Calculator()
let calculatorView = CalculatorView()
let calculatorController = CalculatorController(calculator: calculator, calculatorView: calculatorView)

calculatorController.add(number1: 10, number2: 5) // Output: Result: 15.0
calculatorController.subtract(number1: 10, number2: 5) // Output: Result: 5.0
calculatorController.multiply(number1: 10, number2: 5) // Output: Result: 50.0
calculatorController.divide(number1: 10, number2: 0) // Output: Result: 0.0

2. MVVM模式(Model-View-ViewModel)

MVVM模式是一种基于MVC模式的设计模式,它将视图和模型之间的交互通过ViewModel来实现,解耦了视图和模型之间的依赖关系。ViewModel负责处理视图和模型之间的交互,将模型转换为视图可以使用的数据格式。

MVVM(Model-View-ViewModel)模式示例代码:

// Model
class User {
    var name: String
    var age: Int
    
   init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

// View
class UserView {
    var viewModel: UserViewModel
    
   func displayUser() {
        print("Name: \(viewModel.name), Age: \(viewModel.age)")
    }
}

// ViewModel
class UserViewModel {
    var user: User
    
   var name: String {
        return user.name
    }
       var age: Int {
        return user.age
    }
    
   init(user: User) {
        self.user = user
    }
    
   func updateUser(name: String, age: Int) {
        user.name = name
        user.age = age
    }
}

// Usage
let user = User(name: "John", age: 30)
let userViewModel = UserViewModel(user: user)
let userView = UserView(viewModel: userViewModel)

userViewModel.updateUser(name: "Jane", age: 25)
userView.displayUser()

具体实例:在iOS开发中,你可以使用MVVM模式来构建应用程序的数据模型和逻辑结构。比如,在一个简单的天气应用程序中,你可以使用MVVM模式将天气数据放在模型中,将天气显示逻辑放在视图中,将天气数据的转换逻辑放在ViewModel中。

以下是一个简单的天气应用程序的MVVM模式代码示例:

// Model
struct Weather {
    let temperature: Double
    let description: String
}

// View
class WeatherView {
    var weatherViewModel: WeatherViewModel? {
        didSet {
            updateUI()
        }
    }
    
    func updateUI() {
        guard let viewModel = weatherViewModel else {
            return
        }
        
        print("Temperature: \(viewModel.temperature)°C")
        print("Description: \(viewModel.description)")
    }
}

// ViewModel
class WeatherViewModel {
    let weather: Weather
    
    var temperature: String {
        return String(format: "%.1f", weather.temperature)
    }
    
    var description: String {
        return weather.description
    }
    
    init(weather: Weather) {
        self.weather = weather
    }
}

// Usage
let weather = Weather(temperature: 27.5, description: "Sunny")
let weatherViewModel = WeatherViewModel(weather: weather)
let weatherView = WeatherView()

weatherView.weatherViewModel = weatherViewModel // Output: Temperature: 27.5°C, Description: Sunny

3. 单例模式(Singleton)

单例模式是一种常用的设计模式,它保证一个类只有一个实例,并提供全局访问点。单例模式可以避免多个实例之间的冲突和资源浪费。

单例模式示例代码:

class Singleton {
    static let shared = Singleton()
    
   private init() {}
    
   func doSomething() {
        print("Doing something")
    }
}

// Usage
Singleton.shared.doSomething()

具体实例:在iOS开发中,你可以使用单例模式来管理应用程序的全局状态和资源。比如,你可以使用单例模式来管理应用程序的网络连接、数据库连接等全局资源。

以下是一个使用单例模式来管理应用程序的网络连接的完整代码实例:

// NetworkManager Singleton
class NetworkManager {
    static let shared = NetworkManager()
    
    private init() {
        // Initialize network manager
    }
    
    func makeRequest(url: String, completion: @escaping (Data?, Error?) -> Void) {
        guard let url = URL(string: url) else {
            completion(nil, NSError(domain: "Invalid URL", code: 0, userInfo: nil))
            return
        }
        
        let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
            completion(data, error)
        }
        task.resume()
    }
}

// Usage
NetworkManager.shared.makeRequest(url: "https://example.com") { (data, error) in
    if let error = error {
        print("Error: \(error.localizedDescription)")
        return
    }
    
    guard let data = data else {
        print("Error: No data received")
        return
    }
    
    let responseString = String(data: data, encoding: .utf8)
    print("Response: \(responseString ?? "")")
}

在这个例子中,我们创建了一个NetworkManager单例类,它有一个makeRequest方法,用于发起网络请求,并在请求完成后调用回调函数。我们在makeRequest方法中使用了URLSession来发起网络请求。我们可以通过调用NetworkManager.shared来获取NetworkManager单例的实例,并使用makeRequest方法来发起网络请求。

4. 工厂模式(Factory)

工厂模式是一种常用的设计模式,它将对象的创建和使用分离开来,通过一个工厂类来创建对象。工厂模式可以避免对象的创建和使用之间的耦合,提高代码的可维护性和可扩展性。
具体实例:在iOS开发中,你可以使用工厂模式来创建和管理应用程序中的对象。比如,你可以使用工厂模式来创建和管理应用程序的数据访问对象、网络请求对象等。

工厂模式示例代码:

// Product
protocol Animal {
    func makeSound()
}

// Concrete Products
class Dog: Animal {
    func makeSound() {
        print("Woof!")
    }
}

class Cat: Animal {
    func makeSound() {
        print("Meow!")
    }
}

// Factory
class AnimalFactory {
    func createAnimal(type: String) -> Animal? {
        switch type {
        case "dog":
            return Dog()
        case "cat":
            return Cat()
        default:
            return nil
        }
    }
}

// Usage
let animalFactory = AnimalFactory()

if let dog = animalFactory.createAnimal(type: "dog") {
    dog.makeSound()
}

if let cat = animalFactory.createAnimal(type: "cat") {
    cat.makeSound()
}

具体实例:在iOS开发中,你可以使用工厂模式来创建和管理应用程序中的对象。比如,你可以使用工厂模式来创建和管理应用程序的数据访问对象、网络请求对象等。

以下是一个使用工厂模式来创建和管理应用程序的数据访问对象的完整代码示例:

// DataAccessFactory Protocol
protocol DataAccessFactory {
    func createDataAccess() -> DataAccess
}

// DataAccess Protocol
protocol DataAccess {
    func getData() -> [String: Any]?
    func saveData(data: [String: Any])
}

// CoreDataAccess Factory
class CoreDataAccessFactory: DataAccessFactory {
    func createDataAccess() -> DataAccess {
        return CoreDataAccess()
    }
}

// CoreDataAccess Class
class CoreDataAccess: DataAccess {
    func getData() -> [String: Any]? {
        // Fetch data from Core Data
        // ...
        return nil
    }
    
    func saveData(data: [String: Any]) {
        // Save data to Core Data
        // ...
    }
}

// Usage
let dataAccessFactory: DataAccessFactory = CoreDataAccessFactory()
let dataAccess = dataAccessFactory.createDataAccess()
let data = dataAccess.getData()
dataAccess.saveData(data: ["key": "value"])

在这个例子中,我们定义了一个DataAccessFactory协议和一个DataAccess协议,分别用于定义数据访问对象的工厂和接口。然后,我们实现了一个CoreDataAccessFactory工厂类,用于创建CoreDataAccess数据访问对象。CoreDataAccess实现了DataAccess接口,它可以从Core Data中获取数据并将数据保存到Core Data中。我们可以通过调用CoreDataAccessFactory的createDataAccess方法来获取CoreDataAccess对象的实例,并使用getData和saveData方法来获取和保存数据。这种方式可以使我们在不改变业务逻辑的情况下,轻松地更改数据访问对象的实现方式。

iOS 21种设计模式之抽象工厂(Abstract Factory) 原创Blog,转载请注明出处 http://blog.youkuaiyun.com/hello_hwc?viewmode=list 我的stackoverflow感谢感谢《Pro Objective-C Design Pattern for iOS》一书,这个博客系列由很多灵感源自次书。同时,也感谢Wiki以及一些博客博主。每篇文章最后,都会列出参考链接。这个系列的文章 工厂 抽象工厂 单例 原型 生成 阅读详情

相关推荐

MVVM设计模式:使用Swift在iOS开发中的实践

MVVM(Model-View-ViewModel)设计模式是一种用于分离用户界面(View)和业务逻辑(Model)的软件架构模式。该模式通过引入一个中间层(ViewModel)来帮助开发者实现数据的双向绑定,并且隔离视图层和数据层,提高代码的可测试性和可维护性。在MVVM架构中,Model是代表数据源的组件,它独立于视图和视图模型。Model的职责是处理应用程序的数据逻辑,如数据的存取、验证等。为了实现数据封装,Swift使用结构体或类来定义模型。示例代码:// 实现数据的验证逻辑。

weixin_35433448的博客 1114

iOS简单理解区分MVC、MVP、MVVM

这篇文章简单介绍MVC、MVP和MVVM三种架构,并配上一个简单的Swift demo来区分MVC和MVVM两种架构。

yueliangmua的博客 3355

Swift新闻客户端项目实战指南

UIKit框架中包含了各种各样的组件,它们可以大致分为以下几类:视图(Views):这是构成用户界面最基本的元素,包括了像UILabelUIButton等。视图负责显示内容,并且响应用户的交互。控件(Controls):控件是一类特定的视图,它们主要用来接收用户的输入,如和UISwitch。窗口(Windows)UIWindow是视图层次结构中的顶级视图,所有的UI操作都发生在某个窗口的上下文中。视图控制器(View Controllers)

weixin_35982453的博客 913

Swift中MVVM设计模式如何应用于iOS开发?有哪些实践案例?

在MVVM中,Model代表数据模型,View代表用户界面,而ViewModel则作为连接Model和View的桥梁,负责处理业务逻辑和状态管理。其中,Model-View-ViewModel(MVVM)设计模式因其清晰的结构和松耦合的特性,受到了广大iOS开发者的青睐。此外,ViewModel还负责监听View的状态变化,并据此更新Model中的数据。Model通常表示应用中的数据模型,可以是一个简单的数据结构,也可以是一个复杂的对象。Model的主要职责是存储和提供数据,不包含任何与UI相关的逻辑。

aronSandy的博客 1574

ios-Swift项目开启之路--基于MVVM依赖RxSwift项目架构的搭建.zip

如何开启一个新的swift项目?这里我给出了我的答案。我选择依赖RxSwift开发基于MVVM项目的主要原因是它的概念里面的ViewModel层,它集成了本来写在ViewController,View层的代码,例如网络请求,视图逻辑等,使得整个架构更加清晰更加易于修改;这个Demo体现了我是如何利用RxSwift构造网络层和数据模型层等,并实现一个网络请求的整个过程来加深大家理解。http://www.jianshu.com/p/c314fad02251这是简书上关于Demo详细的讲解(Demo包超过5m,抱歉,只上传了没pod的,这里是完成代码 https://github.com/zxc3731/NewSwiftProjectDemo)

Vitis HLS 学习指南与实践教程

Vitis HLS 学习指南与实践教程摘要:本文系统介绍了AMD Vitis HLS工具及其应用。HLS技术将C/C++代码自动转换为硬件描述语言,显著提升FPGA开发效率(5-10倍)。文章对比了HLS与传统RTL设计的优势,包括抽象级别高、开发周期短、代码重用性强等特点。详细讲解了Vitis HLS工具链的核心功能,包括支持的C/C++特性(如任意精度数据类型)、开发流程(项目创建-代码编写-仿真-综合)以及关键优化技术(流水线、循环展开、数组分割等编译指示)。通过具体代码示例展示了HLS设计方法,为F

weixin_44707118的博客 1400

「中介者(Mediator)」设计模式 Swift实现

中介者设计模式(Mediator Pattern)是一种行为型设计模式,它可以促进对象之间的松耦合关系,通过集中控制这些对象之间的通信来减少对象之间的直接依赖。 在这种模式中,中介者对象充当了通信的中心枢纽,其主要的功能是将对象之间的通信转移至自身,从而使这些对象之间解耦,并且更容易维护和扩展。 具体来说,在中介者模式中,每个对象都有指向中介者对象的引用,通过调用中介者对象的方法来与其它对象进行协调和通信,而不是直接与其它对象进行交互。

黑码哥的技术博客 2万+

RK3576处理器RT-Thread与Linux混合部署实现工业EtherCAT实时控制

实时操作系统(RTOS)是工业自动化领域的核心技术,通过精确的任务调度和中断响应机制确保微秒级控制精度。RT-Thread作为开源实时系统,采用优先级抢占式调度算法,能够满足运动控制和总线通信的硬实时需求。在工业显控一体设备中,实时系统需要与富应用系统协同工作,Linux系统负责图形界面和网络通信等非实时任务。混合部署架构通过共享内存和核间通信技术实现数据交换,既保证了实时性能又扩展了应用生态。EtherCAT工业以太网协议作为高性能现场总线,采用主从站结构和分布式时钟同步,可实现多轴运动控制的精确同步。R

weixin_33738982的博客 2627

ios客户端学习笔记(一):swift学习路径

MVC模式(Model-View-Controller)MVC模式是一种常用的设计模式,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据和业务逻辑,视图负责显示数据和用户交互,控制器负责协调模型和视图之间的交互。具体实例:在iOS开发中,你可以使用MVC模式来构建应用程序的数据模型和逻辑结构。比如,在一个简单的计算器应用程序中,你可以使用MVC模式将计算逻辑放在模型中,将显示逻辑放在视图中,将用户交互放在控制器中。

goodgoodstudy___的博客 1222

matlab内读取文件目录时斜杠和反斜杠的使用

@matlab内读取文件目录时斜杠和反斜杠的使用TOC matlab内读取文件目录时,斜杠和反斜杠的使用 最近被斜杠和反斜杠弄晕了,于是总结了一下,在此和大家分享一下。 代码 clear; clc; close all; I1= imread('..\zs1.jpg'); %和代码文件夹同目录的图片 (纯反斜杠) I2= imread('../zs2/zs2.j...

weixin_44456694的博客 6571

c++ webrtc基础(1) :webrtc源码下载与编译、项目模块介绍、学习资料推荐

本篇博客介绍webrtc源码的下载与编译,以及推荐webrtc学习资料。 源码下载 电脑环境:win10/win11 64bit,合理的上网环境,没有合理的网络环境无法拉取、下载webrtc代码和工具,宽带速度要快,尽量50M. 主要步骤如下: (1) 安装git (2) 打开cmd控制台,下载google开发工具depot_tools: git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git (3) 新建一个目

琅嬛福地 3293

如何用AI生成《ios客户端学习笔记(一):Swift学习路径》

本文是AI对话的一个实际应用案例,使用AI对话写了一篇博客本文详细说明了如何用AI生成《ios客户端学习笔记(一):Swift学习路径》

goodgoodstudy___的博客 775

python全栈入门到实战【基础篇 02】环境搭建:Python解释器与PyCharm、VSCode编辑器安装配置详解

本文详解Python环境搭建步骤。首先安装解释器(运行代码核心),需从官网下载,选3.8及以上版本(勿选2.x)。Windows安装必勾“Add Python.exe to PATH”,验证用`python --version`;Mac选universal2安装包,验证用`python3 --version`。 编辑器二选一:PyCharm社区版(免费,新手推荐),安装后需配置解释器路径;VSCode轻量,需装Python插件并选择解释器。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 5万+

终极指南:如何使用OpenAPI Generator快速为iOS应用生成Swift API客户端

OpenAPI Generator是一款强大的工具,能够根据OpenAPI规范(v2、v3)自动生成API客户端库、服务器存根、文档和配置。本指南将详细介绍如何利用OpenAPI Generator为iOS应用快速生成Swift API客户端,帮助开发者节省时间并提高开发效率。 ## 🚀 为什么选择OpenAPI Generator生成Swift客户端? OpenAPI Generator提

gitblog_00707的博客 1024

【数据集6】全球人工不透水面积GAIA(清华数据)

全球人工不透水面GAIA简介及其应用

WW、forever的博客 3800

Openclaw 错误分析 与 解决方案 之:Selected model is at capacity. Try a different model, or wait and retry.

Openclaw 错误分析 与 解决方案 :Selected model is at capacity. Try a different model, or wait and retry.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 6412

Moscapsule: iOS上的Swift实现MQTT客户端指南

Moscapsule: iOS上的Swift实现MQTT客户端指南 项目目录结构及介绍 Moscapsule是一个为iOS平台编写的Swift语言实现的MQTT客户端框架。以下是其核心目录结构及其简介: - Moscapsule.xcodeproj: 主工程文件,用于在Xcode中打开和管理项目。 - Moscapsule: 框架源码所在目录,包含了Swift编写的MQTT协议实现。 - Mosc...

gitblog_00861的博客 595

SAP B1中文培訓教材_SDK

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

ios客户端学习笔记(二):学习Swift基础知识

全面学习Swift基础知识

goodgoodstudy___的博客 1464

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

了解Swift中最流行的iOS设计模式

如果您是具有高级技能且经历过大量iOS项目的iOS开发人员,您一定会知道选择合适的设计模式非常重要。它可以帮助您的项目顺利运行,并使其更具可读性,灵活性和可重用性. 基于这些经验,在本Swift教程中,我们将讨论所有iOS设计模式,以便您高度概述iOS应用程序开发中可能和常见的内容。 1. iOS设计模式简介 我正在建造房子,你必须有一个详细设计的计划。如果计划质量差,在建设时...

weixin_30779691的博客 144

Statistics and Machine Learning Toolbox

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

如何用AI生成《ios客户端学习笔记(二):学习Swift基础知识》

本文是AI对话的另一个实际应用案例,使用AI对话写了另一篇博客本文详细说明了如何用AI生成《ios客户端学习笔记(二):学习Swift基础知识》

goodgoodstudy___的博客 788

IOS开发学习资料集合(开发必备)

IOS学习资料,包含了入门、进阶、性能优化、面试和学习书籍

m0_67537062的博客 1万+

[纯代码] Swift+UIKit · 搭建第一个iOS APP项目

纯代码搭建第一个Swift+UIKIt项目

ZyuHoiMing 4921

探秘《 JianDanIOS》:一个开源的iOS版豆瓣简洁客户端

探秘《 JianDanIOS》:一个开源的iOS版豆瓣简洁客户端 去发现同类优质开源项目:https://gitcode.com/ 项目简介 JianDanIOS 是一个由ShenHuaLXT开发并维护的开源项目,它是一款基于iOS平台的豆瓣社区客户端。该项目的目标是为用户提供一个简洁、高效的界面,用于浏览和互动于豆瓣的各类内容,如小组、日记、话题等。得益于其开源性质,开发者可以查看源代码,学习i...

gitblog_00097的博客 902

ios客户端学习笔记(四):学习Swift的网络编程

在iOS应用程序开发中,网络编程是非常重要的。Swift提供了多种网络编程框架,如NSURLSession、Alamofire等。你需要学习如何使用这些框架来进行网络通信,包括数据的请求、响应和解析等。

goodgoodstudy___的博客 1135

手把手教学:详解Swift中的iOS设计模式

说到设计模式,相信大家都不陌生,但是又有多少人知道它背后的真正含义?绝大多数程序员都知道设计模式十分重要,不过关于这个话题的文章却不是很多,开发者们在开发的时候有时也不太在意设计模式方面的内容。 设计模式针对软件设计中的常见问题,提供了一些可复用的解决方案,开发者可以通过这些模板写出易于理解...

chunqingtai2922的博客 192
上一篇: 如何用AI生成《ios客户端学习笔记(二):学习Swift基础知识》
下一篇: ios客户端学习笔记(四):学习Swift的网络编程
study_&
博客等级 码龄8年 128粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值