自动闭包@autoclosure

从零到一:手把手教你构建自定义ReaxFF力场参数 本文手把手教你从零构建自定义ReaxFF力场参数,详解反应力场的动态键序机制与参数化逻辑。通过LAMMPS实战演示,涵盖训练数据准备、参数优化算法选择及性能优化技巧,助力研究人员精准模拟化学反应过程。适用于材料科学、催化研究等领域,特别适合已掌握分子动力学基础的进阶用户提升力场开发能力。 阅读详情

自动闭包@autoclosure


什么是自动闭包

  • 自动闭包就是把一个表达式直接自动闭合一个闭包,这样看起来就比较好看了,难到只是为了好看吗?错了,这还是苹果优化性能的方法。为啥这么说类,你一会就会明白了。
func sendRequest(argc1: String, arc2: String, completionHandle: () -> Bool) {
    if completionHandle() {
        print(argc1, arc2)
    }
}

sendRequest(argc1: "5", arc2: "6") { () -> Bool in
    return true
}

  • 我们不是说自动闭包还以让闭包变得漂亮吗
func sendRequest(argc1: String, arc2: String, completionHandle: @autoclosure () -> Bool) {
    if completionHandle() {
        print(argc1, arc2)
    }
}

sendRequest(argc1: "5", arc2: "6", completionHandle: true)
  • 哇就是好漂亮啊,不是说可以传表达式吗?我试试看
sendRequest(argc1: "5", arc2: "5", completionHandle: 3 < 5)
  • yes ,没错是不是你又想起了sorted函数了,知道为啥可以那么传参数了吧

什么时候可以使用自动闭包类

闭包类型是是这样的() -> T

  • 不是说自动闭包可以提升性能吗
  • 来两个表达式
let conditio1 = 3 + 6 > 5
let condition2 = 5 + 2 < 3

if conditio1 && condition2 {
    print("为真")
}
  • 我们知道条件1为假,条件2都不用计算了。 conditio1 || conditio2 条件1为真,条件2也不用计算了。这样并不会影响结果,而且还减少了一次计算。这就是性能上有了优化。这和我们的闭包有啥关系类。接着看列子
func logTrue(condition1: () -> Bool, condition2: () -> Bool) {
    if condition1() && condition2() {
        print("condition1和condition2为真")
    }
}


logTrue(condition1: { () -> Bool in //这样写是为了让大家看一下到底是不是我们说的那样
    print("执行了condition1")
    return 3 + 1 > 10
}) { () -> Bool in
    print("执行了condition2")
    return 3 + 2 > 20
}

EM4095低频RFID曼彻斯特解码实战:从原理图到MCU代码实现 本文详细介绍了EM4095低频RFID读卡器的设计与实现,从芯片工作原理、天线设计到曼彻斯特解码算法。重点讲解了基于STM32的MCU代码实现,包括定时器捕获、数字滤波和错误处理,为开发125kHz RFID系统提供实用指南。 阅读详情

相关推荐

AI影像组学在结直肠癌诊疗中的应用:从特征提取到临床决策

影像组学通过高通量计算从医学影像中提取定量特征,揭示肿瘤内部的微观生物学行为,这些特征反映了纹理异质性、形状不规则度等影像表型。其核心原理在于将图像数据转化为可分析的数字特征,结合机器学习算法进行模式识别,从而实现对疾病状态的精准预测。这一技术的价值在于能够无创、定量地评估肿瘤特性,为精准医疗提供关键支持。在临床实践中,AI驱动的影像组学模型广泛应用于结直肠癌的诊疗全链条,包括肿瘤良恶性鉴别、基因突变预测、治疗反应评估和预后分析等场景。通过整合影像组学特征与临床数据,可以构建预测模型,辅助医生进行更准确的诊

weixin_28295799的博客 409

Swift 自动闭包(autoclosure)

自动闭包

qq_37524003的博客 544

图片数据爬取工具Image-Downloader的安装和使用

文章目录1、python安装2、下载chromedriver并配置3、下载phantomjs并配置.4、安装相关python库5、使用 安装包地址:https://github.com/sczhengyabin/Image-Downloader 下载: 方式一:打开cmd,输入: git clone https://github.com/sczhengyabin/Image-Downloader.git 方式二:打开网址 1、python安装 该数据爬取工具要求python>=3.5,由于

wxplol的博客 6672

【Swift】闭包(Closure)

从上面的函数和闭包的定义中可以看到是相同的,都是传入参数,可对参数进行操作,然后返回一个值。从定义中可以看出,函数是有name的,而闭包没有。那么闭包是如何调用的呢?函数中给这个求面积的函数命名为area,而闭包是用{}包裹起来,在这里闭包是没有名字的,所以将闭包赋值相当于给闭包一个名字,这样闭包就能像函数一样使用。所以area约等于。闭包是特殊的函数,当函数作为参数,或返回值,或匿名函数时,称为闭包。从area函数看到,函数中只传入一个闭包,然后返回一个Double值。

Yzzzzw01的博客 1159

ENS160传感器原理图设计,已量产(空气质量传感器)

ENS160 是一款集成式数字空气质量传感器,核心优势源于 “MEMS 传感元件 + 内置微处理器” 的架构。

不脱发的程序猿 569

【人工智能之深度学习】12. BERT微调实战:医疗文本分类的领域自适应技巧与工业级实现

摘要:医疗文本分类是自然语言处理在医疗健康领域的核心应用,可辅助疾病诊断、病历结构化和医疗质量监控。然而,医疗文本的专业术语密集、实体关系复杂及数据长尾分布等特性,导致通用BERT模型性能受限。本文系统阐述医疗文本分类的领域自适应技术,从理论原理到工业级实现展开全流程讲解。首先分析医疗文本的独特属性及技术挑战;随后详解领域继续预训练、适配器微调、对抗训练等核心技术的数学原理;构建包含数据预处理、模型优化、隐私保护的完整实战架构;通过疾病分类、情感分析、事件检测三大案例验证技术有效性。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1004

Swift之自动闭包(@autoclosure、@noescape、@escape、??)

@autoclosure(自动闭包) 1:自动闭包,顾名思义是一种自动创建的闭包,用于包装函数参数的表达式,可以说是一种简便语法. 2:自动闭包不接受任何参数,被调用时会返回被包装在其中的表达式的值。 3:自动闭包的好处之二是让你能够延迟求值,因为代码段不会被执行直到你调用这个闭包,这样你就可以控制代码什么时候执行。 4:含有autoclosure特性的声明同时也具有noescape的特性,及默认...

欢迎来到Jack的程序世界 7667

基于YOLO和KCF的目标跟踪算法研究

该算法结合了YOLO的目标检测能力和KCF的目标跟踪精度,能够实现准确且高效的目标跟踪。通过结合YOLO的目标检测能力和KCF的目标跟踪精度,该算法能够实现准确且高效的目标跟踪。目标跟踪:从第二帧开始,我们使用YOLO检测目标,并使用KCF跟踪器更新目标的位置。具体而言,对于每个检测到的目标,我们计算其与上一帧跟踪结果的特征相似度,然后选择最相似的目标作为当前帧的跟踪结果。需要注意的是,以上代码只是演示了基于YOLO和KCF的目标跟踪算法的基本思路,实际应用中可能需要根据具体情况进行调整和优化。

QoDeveloper的博客 1573

【IOS】SWIFT关键字属性之@autoclosure

【IOS】SWIFT关键字属性之@autoclosure Swift 中有很多有用的属性关键字。@autoclosure 是其中之一,是一个非常常用的属性。 为了更好的说明这个属性的作用,将用一个ifelse的例子进行说明。 func ifelse<V>(_ condition: Bool, valueTrue: () -> V, valueFalse: () -> V) -> V { condition ? valueTrue() : valueFalse() }

BestpayTech的博客 430

【2022】人工智能☆✨

1. 朴素⻉叶斯⽅法是⼀种 ( ) ⽅法。A.机器学习的分类B.不确定性推理C.知识表示答案:A解析:朴素贝叶斯分类器是基于贝叶斯定理与特征条件独立假设的分类方法。它通过学习训练数据集来预测未知数据的类别标签,因此属于机器学习中的监督学习分类方法。选项B不确定性推理和选项C知识表示虽然与朴素贝叶斯方法有一定的关联,但它们并不是朴素贝叶斯方法的主要应用领域或定义特性。2. 关于启发式搜索描述正确的是 ( )。

super_mochi1 391

pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案

本文主要介绍了pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]’ is not a valid editable requirement解决方案,希望能对使用markitdown的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 2万+

Swift 闭包与@autoclosure

有写过OC的同学一定知道OC中又个Block的概念,其实Swift中有一个也有与之对应的闭包概念,说到闭包不得不说@autoclosure关键字,其实就是自动闭包的意思。 先来看看Swift的闭包如何写? override func viewDidLoad() { super.viewDidLoad() //直接调用方法 printText { () -> Int in return 1 } }

张璟冰的博客 1815

uniapp H5刷新页面后返回按钮失效问题完美解决方案

这个问题其实很隐蔽,尤其是uniapp H5 场景下刷新导致栈清理,很多开发者一开始都懵掉了。uniapp 内部对「页面栈只有一个」时的返回逻辑是reLaunch;所以只要在这个分支里替换为自己的逻辑(比如),就能顺利实现预期。目前我在项目里已经跑通了,暂时没发现问题。不得不说,知道源码里这个逻辑后,真的是醍醐灌顶,只能膜拜框架大佬了 🤯。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 523

SwiftFormat自动闭包格式化:@autoclosure的使用

你还在为Swift自动闭包(AutoClosure)的格式化一致性烦恼吗?本文将系统讲解@autoclosure的正确用法与SwiftFormat的自动化处理方案,帮你彻底解决闭包语法混乱、格式不统一的问题。读完本文你将掌握:@autoclosure的适用场景、SwiftFormat的闭包格式化规则、实战案例对比及高级配置技巧。 ## 一、自动闭包基础:@autoclosure的本质与价值 #...

gitblog_00585的博客 839

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

@autoclosure-可以让表达式自动封装成一个闭包

@autoclosure 在闭包前面加上@autoclosure func or(first:Bool,@autoclosure second:()-&gt;Bool) -&gt; Bool { if first { return true } else { return second() } } 再来看下调用 or(2&gt;...

weixin_33755554的博客 122

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

@autoclosure-可以让表达式自动封装成一个闭包:输入的是一个表达式

@autoclosure 在闭包前面加上@autoclosure func or(first:Bool,@autoclosure second:()->Bool) -> Bool { if first { return true } else { return second() } } ...

diaoju3333的博客 164

自动闭包

// 自动闭包 /* 1.只支持 ()->T 格式 2.有无@autoclosure 构成了函数的重载 3.空合运算符使用了自动闭包 4.有可能延时执行,不一定会执行 */ //函数判断v1大于0返回v1,否则返回v2 func getFirstNum(_ v1:Int,_ v2:Int) -> Int{ return v1>0 ? v1:v2 } //当v2需要通过一个函数获取数值时 func getv2() -> Int{ let ...

flg1554112450的博客 324

Swift @autoclosure关键字的用法及场景

@autoclosure及自动封装成闭包 我们先模拟一个场景 创建一个数组 我们先判断数组是否为空,再去判断他下标为0的元素是否为0 显然这段场景需要先执行第一步才能再执行第二步 否则数组会出现越界 我们使用下面代码 let num = [Int]() //这里第一个条件判断出有问题就不会执行第二个操作了 这样就不会越界了 if !num.isEmpty &amp;&amp; num[0]&gt;...

MChuajian的博客 1775

@noescape @escaping @autoclosure

原帖地址:https://segmentfault.com/a/1190000006946983@noescape 非逃逸闭包 当闭包作为参数传递进函数时,如果这个闭包只在函数中被使用,则开发者可以将这个闭包声明成非逃逸的,即告诉系统当此函数结束后,这个闭包的生命周期也将结束,这样做的好处是可以提高代码性能,将闭包声明成非逃逸的类型使用@noescape关键字。 (1) 默认,swift 3.0

享受开发,颠倒银河 1109

Swift iOS : 自动闭包autoclosure

如下为官方文档的定义,但是建议你忽略它,搞懂了自动闭包再来看才容易懂:) 自动闭包是一种自动创建的闭包,用于包装传递给函数作为参数的表达式。这种闭包不接受任何参数,当它被调 用的时候,会返回被包装在其中的表达式的值。这种便利语法让你能够省略闭包的花括号,用一个普通的表达式 来代替显式的闭包。复制代码这是一个正常的闭包的定义和调用: func foo(_ i:() -&gt; Int) { ...

weixin_33695450的博客 314

八、闭包

/*1.闭包表达式 在swift中可以通过func定义一个函数,也可以通过闭包表达式定义一个函数 { (参数列表) -> 返回值类型 in 函数体代码 } */ func sum(_ v1: Int, _ v2: Int) -> Int {v1 + v2} var fn = { //闭包定义函数 (v1: Int, v2: Int) -> Int in return v1 + v2 } fn(10, 20) //2.闭包表达式的简写 func exe...

u013886407的博客 147

10、Swift闭包

一、闭包是⼀个捕获了上下⽂的常量或者是变量的函数。 func testFunc() { print("test method") } 上⾯的函数是⼀个全局函数,也是⼀种特殊的闭包,只不过当前的全局函数并不捕获值。 下面我们查看一个有内嵌函数的闭包 func makeIncrementer() -> () -> Int { var runningTotal = 10 func incrementer() -> Int{ runningTot...

Holothurian 1273

swift5 基本语法-闭包

在swift中,说到闭包表达式(Closure Expression),我们就能想起来Objective-C中的Block,确实两者之间非常相似,功能也基本相同,都可以在代码中使用或者用来作为参数传值。我们一起来学习下swift中的闭包用法。 在swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数。 1.闭包语法 {(参数列表) ->返回值类型 in 函数体代码} 【...

u010707262的博客 319

Swift 闭包(Closures)

概述 闭包是字包含的的函数代码快,可以在代码快中被传递和使用。早些年Objc时期,有面试官问我如何看待block 和 delegate 时候,个人比较倾向block的时候被提醒道:block会带来一些可读性和循环引用等问题。当然这也不能阻挡我对block的喜欢,最起码整洁度确实很好,有问题咱就搞清楚了。 闭包表达式 语法 { (parameter) -> returnType in // statements } 根据上述表达式中可以看出闭包的函数体部分由in关键字引入。关于 ...

jeversonjee's blog 334

Swift 柯里化以及autoclosure

参考文章: https://juejin.im/post/5a508a536fb9a01cad7bfb60 https://swift.gg/2016/04/06/swift-qa-2016-04-06/ https://www.jianshu.com/p/5b27fec8c616 一、柯里化 Currying 柯里化(Currying)是从数学里借用过来的编程语言技法(基于20世纪Haskell...

Quinn's blog ! I'm glad to be here! 624
上一篇: iOS底层原理总结 - Category的本质
下一篇: iOS11新特性
Philm_iOS
博客等级 码龄8年 74粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值