前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Swift中? 、! 和 ??

Swift中? 、! 和 ??

作者头像
赵哥窟
发布于 2020-08-17 08:03:14
发布于 2020-08-17 08:03:14
1.6K00
代码可运行
举报
文章被收录于专栏:日常技术分享日常技术分享
运行总次数:0
代码可运行

Swift中是可以声明一个没有初始值的属性, Swift中引入了可选类型(Optional)来解决这一问题。它的定义是通过在类型声明后加一个 ? 操作符完成的。 例如: var name: String?

Optional其实是个enum,里面有None和Some两种类型。其实所谓的nil就是Optional.None , 非nil就是Optional.Some, 然后会通过Some(T)包装(wrap)原始值,这也是为什么在使用Optional的时候要拆包(从enum里取出来原始值)的原因。这里是enum Optional的定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enum Optional<T> : LogicValue, Reflectable {  
        case None  
        case Some(T)  
        init()  
        init(_ some: T)  
        /// Allow use in a Boolean context.  
        func getLogicValue() -> Bool  
       /// Haskell's fmap, which was mis-named  
        func map<U>(f: (T) -> U) -> U?  
        func getMirror() -> Mirror 
}
? 和 ! 使用

一旦声明为Optional的,如果不显式的赋值就会有个默认值nil。判断一个Optional的值是否有值,可以用if来判断:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if name { 
// 有值再操作
}

在使用Optional值的时候需要在具体的操作,比如调用方法、属性、下标索引等前面需要加上一个?,如果是nil值,也就是Optional.None,会跳过后面的操作不执行,如果有值,就是Optional.Some,可能就会拆包(unwrap),然后对拆包后的值执行后面的操作,来保证执行这个操作的安全性。

? 的使用场景:

1.声明Optional值变量 2.用在对Optional值操作中,用来判断是否能响应后面的操作 3.使用 as? 向下转型

下面声明一个对象Person为可选类型,或者一个可选的String

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var person:Person?
var str:String?
var num:NSNumber!

可选类型 可以不用初始化,如果不是可选类型,必须在init下进行初始化。保证在调用的时候不是nil

可选类型在调用的时候必须加上?或者!,声明的时候用的!的可以不加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 let str:String! = "Hello"
        let greeting = "World!"
        if str != nil {
          let message = str + " " + greeting
          print(message)
}

声明的时候用的?需要加上!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let str:String? = "Hello"
        let greeting = "World!"
        if str != nil {
            let message = str! + " " + greeting
            print(message)
 }

??是取两个中不为nil的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let helloStr:String? = nil
let x = helloStr ?? "Hello World!"
print(x)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
实时监控900多家中国企业的新闻动态
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 此项目可监控近千家中国企业的官方网站的新闻动态,如有更新,系统能在最短2分钟之内通过邮件发送更新的标题和链接。更新的信息流也可通过浏览器查看。监控的公司和站点可以添加删除。 原理:定期抓取网站html, 使用difflib比对新旧页面源码,发现增加的部分,提取url和text,过滤筛选,保存MySQL数据库。定期把更新的url和text,通过邮件发送给订阅者。 全部代码 获取方式: 关注微信公众号 datayx  然
机器学习AI算法工程
2022/04/22
9030
实时监控900多家中国企业的新闻动态
简单理解LSTM神经网络
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 递归神经网络 在传统神经网络中,模型不会关注上一时刻的处理会有什么信息可以用于下一时刻,每一次都只会关注当前时刻的处理。举个例子来说,我们想对一部影片中每一刻出现的事件进行分类,如果我们知道电影前面的事件信息,那么对当前时刻事件的分类就会非常容易。实际上,传统神经网络没有记忆功能,所以它对每一刻出现的事件进行分类时不会用到影片已经出现的信息,那么有什么方法可以让神经网络能够记住这些信息呢?答案就是Recurrent
机器学习AI算法工程
2022/03/04
9030
羊了个羊,python一键通关
向AI转型的程序员都关注了这个号👇👇👇 火爆全网的小游戏羊了个羊到底藏了什么套路?几乎所有人上班下班都在玩,可通关率据说还不到1%。 其实这个游戏和你的策略或技术没啥关系,完全是算法和运气在折磨你。十年前我们玩空当接龙的时候,所有牌都是明牌,理论上可以算出最优解;但羊了个羊不一样,策略再好也不能稳赢,因为你根本不知道一张牌底下藏着什么牌,这和斗地主还不一样,斗地主的牌堆是固定的,但游戏里的牌堆可以被算法改变。 知乎上有人算出了通关概率,游戏一共有14种图案,即使按照逐渐消层的最优解,底下的牌也有200多万
机器学习AI算法工程
2022/09/27
1.8K0
羊了个羊,python一键通关
基于PyTorch的卷积神经网络经典BackBone(骨干网络)复现
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 前言 卷积神经网络的发展,从上个世纪就已经开始了,让时间回到1998年, 在当时,Yann LeCun 教授提出了一种较为成熟的卷积神经网络架构LeNet-5,现在被誉为卷积神经网络的“HelloWorld”,但由于当时计算机算力的局限性以及支持向量机(核学习方法)的兴起,CNN方法并不是当时学术界认可的主流方法。时间推移到14年后,随着AlexNet以高出第二名约10%的accuracy rate成为了2012年Ima
机器学习AI算法工程
2022/05/10
1.4K0
基于PyTorch的卷积神经网络经典BackBone(骨干网络)复现
使用python多线程加载模型并测试
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 之前只用过单线程处理,加载模型进行测试,运行时间上也可以接受。但是现在需要处理比较大量的数据,如果进行线性处理,可能测试一次就花10个小时,而且还不知道结果怎么样,所以多线程就必须使用上了。有关线程部分主要参考:https://junyiseo.com/python/211.html 1 多线程 多线程类似于同时执行多个不同程序,线程在执行过程中与进程还是有区别的。每个独立的进程有一个程序运行的入口、顺序执行序列和程
机器学习AI算法工程
2022/03/04
1.6K0
风险事件文本分类(达观杯Rank4)
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 在大数据和人工智能技术加持下,不同行业各种新兴的风险控制手段也正在高速发展。但这些风险信息散落在互联网的海量资讯中,若能从中及时识别出风险事件并挖掘出潜在的风险特征,能够大幅提升识别和揭示风险的能力。而风险事件以文本的形式存在,需要采用自然语言理解模型实现风险事件的高精度智能识别,其本质是属于一个文本分类任务。   NLP(自然语言处理)作为人工智能领域皇冠上的“明珠”,其技术的科研创新一直精进不休。而文本分类在自然
机器学习AI算法工程
2022/03/30
7900
唐宇迪128集课程一套搞定,PyTorch从入门到实战(附带课程学习资料
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 。 。 。 。 。 。 。 全部 代码  ,视频,数据集 获取方式: 关注微信公众号 datayx  然后回复 唐宇迪  即可获取。 机器学习算法AI大数据技术  搜索公众号添加: datanlp 长按图片,识别二维码 ---- 阅读过本文的人还看了以下文章: TensorFlow 2.0深度学习案例实战 基于40万表格数据集TableBank,用MaskRCNN做表格检测 《基于深度学习的自然
机器学习AI算法工程
2022/06/27
3.8K0
唐宇迪128集课程一套搞定,PyTorch从入门到实战(附带课程学习资料
上采样、上池化、反卷积的一点理解
通过卷积和池化等技术可以将图像进行降维,因此,一些研究人员也想办法恢复原分辨率大小的图像,特别是在语义分割领域应用很成熟。通过对一些资料的学习,简单的整理下三种恢复方法,并进行对比。
小草AI
2019/05/29
5K0
《交通大数据理论与方法》
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 随着信息通讯技术的不断发展,各行各业都产生了海量的数据,与此同时,一门新的学科应运而生—— 数据挖掘。数据挖掘是从大量数据(包括文本数据)中挖掘出隐含的、先前未知的、对决策有潜在价值的信 息、知识和关联关系,并基于这些信息和相应规则建立可用于决策支持与优化分析的模型,提供可支持预测 性决策的方法和工具。此外,数据挖掘还可帮助企业和科研团体发现业务与学科中的新趋势,揭示已知的 事实,预测未知的结果,因此“数据挖掘”已成为其
机器学习AI算法工程
2022/09/08
9590
《交通大数据理论与方法》
手写实现李航《统计学习方法》书中全部算法
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 监督部分 第二章 感知机: 博客:统计学习方法|感知机原理剖析及实现 实现:perceptron/perceptron_dichotomy.py 第三章 K近邻: 博客:统计学习方法|K近邻原理剖析及实现 实现:KNN/KNN.py 第四章 朴素贝叶斯: 博客:统计学习方法|朴素贝叶斯原理剖析及实现 实现:NaiveBayes/NaiveBayes.py 第五章 决策树: 博客:统计学习方法|决策树原理剖析及实现 实现:
机器学习AI算法工程
2022/08/26
8280
手写实现李航《统计学习方法》书中全部算法
旷视AI复杂场景的交通标志检测
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 交通标志本身种类众多,大小不定,并且在交通复杂的十字路口场景下,由于光照、天气等因素的影响,使其被精确检测变得更加困难。提高上述场景下交通标志检测准确度,将有助于降低十字路口交通事故发生的概率。 提供真实场景的道路图片,部分图片给出了交通标志的标注结果,所有交通标志共计 5 个类别,分别为红灯、直行标志、向左转弯标志、禁止驶入和禁止临时停车。 数据示例如下: 初赛1/177,复赛1/12 全部 代码  ,方案详情 获取
机器学习AI算法工程
2022/08/29
7220
旷视AI复杂场景的交通标志检测
疫情期间网民情绪识别top1~3解决方案
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 任务 给定微博ID和微博内容,设计算法对微博内容进行情绪识别,判断微博内容是积极的、消极的还是中性的。 全部 代码  ,方案详情 获取方式: 关注微信公众号 datayx  然后回复 情绪识别  即可获取。 A榜第二,B榜第一方案 1.数据处理 我们把数据编码转换为utf-8,把所有英文标点符号转换为中文标点符号,繁体转换为简体。把数据划分为5折。 使用训练集、测试集和90万条语料训练GloVe词向量,在分词阶段把
机器学习AI算法工程
2022/08/26
9480
疫情期间网民情绪识别top1~3解决方案
智慧课堂实时监测系统
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 项目简介 本项目基于PaddlePaddle和EasyDL平台,以教务处和学工为一级用户,高校教师为二级用户,针对提升整体课堂教学质量为目的开发的一款实时课堂监测系统。 本项目主要监测课堂的出勤人数、学生的上课状态、教师的语速、情感,以及语言的用词方面。项目中语音的模型均采用EasyDL平台进行训练,调用在线API进行预测分析。而图像模型由于在线API无法达到实时性的要求,采用本地训练Paddle模型库中的模型并使用。
机器学习AI算法工程
2022/08/26
2.1K0
智慧课堂实时监测系统
小布助手对话短文本语义匹配
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 小布助手是OPPO公司为欧加集团三品牌手机和IoT设备自研的语音助手,为用户提供了有趣、贴心、便捷的对话式服务。意图识别是对话系统中的一个核心任务,而对话短文本语义匹配是意图识别的主流算法方案之一。 训练数据 训练数据包含输入query-pair,以及对应的真值。初赛训练样本10万,复赛训练样本30万,这份数据主要用于参赛队伍训练模型,为确保数据的高质量,每一个样本的真值都有进行人工标注校验。每行为一个训练样本,由que
机器学习AI算法工程
2022/09/06
1.4K0
小布助手对话短文本语义匹配
文本数据标注工具doccano【介绍最详细的一遍文章】
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx doccano是一个开源文本标注工具。它提供了文本分类,序列标注和序列到序列的标注功能。因此,您可以为情绪分析,命名实体识别,文本摘要等创建标记数据。只需创建项目,上传数据并开始标注。 总结下来就3步,上传数据,标注,下载带有标签的数据。 官网:http://doccano.herokuapp.com/ 命名实体识别 第一个演示是序列标记任务之一,命名实体识别。您只需选择文本跨度并对其进行标注即可。由于doc
机器学习AI算法工程
2022/04/13
5.2K0
文本数据标注工具doccano【介绍最详细的一遍文章】
抢京东茅台脚本,定时自动触发,自动预约,自动停止
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 安装依赖 pip install requests 使用方法 浏览器打开:https://order.jd.com/center/list.action 没登录就登录 F12 控制台 console 栏输入 console.log(_JdJrTdRiskFpInfo, _JdEid) 参数依次对应: _JdJrTdRiskFpInfo => self._JdJrTdRiskFpInfo _JdEid => self.
机器学习AI算法工程
2022/06/13
8.6K1
抢京东茅台脚本,定时自动触发,自动预约,自动停止
DBnet对非固定格式核酸报告要素检测提取
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 核酸检测报告已经是疫情这些年很多人出行必备的材料,而且很多机关单位、政府部门都需要检查核酸报告才能让相关的人员进出场所。如果有一个模型能够快速的识别并提取核酸报告里的关键信息,则能很大程度上提升那些需要提交核酸报告的OA流程审核效率,提升企事业的服务效率。 1.标注数据 标注方法和标注目标检测的数据一样,一个框加一个标签 pip install labelImg ==1.8.6 安装完毕后,键入命令: labelImg
机器学习AI算法工程
2022/07/26
7840
DBnet对非固定格式核酸报告要素检测提取
中国车牌生成
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 目前支持蓝色标准车牌,黄色标准车牌,小型新能源车牌的车牌生成。 实际的车牌示例 实际的大型新能源车牌示例 实际的小型新能源车牌示例 生成的蓝色底牌车牌示例 生成的小型新能源车牌示例 全部代码 获取方式: 关注微信公众号 datayx  然后回复 车牌生成 即可获取。 程序结构说明 license_plate_elements.py: 车牌号元素,其中定义: 车牌号中,不同车牌位的取值范围; 不
机器学习AI算法工程
2022/04/28
3K0
中国车牌生成
车辆贷款违约预测 Top1(2021科大讯飞)
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 随着监管政策步入关键落地期,受合规监管标的限额影响,曾备受追捧的大额标的逐渐消失,小额分散的车贷业务成为网贷平台转型的主要方向之一。车贷资产由于进入门槛低、借款额度低、流动性高、限期短等优点,但做好风险防控依然是行业的主要问题之一。 国内某贷款机构就面临了这样的难题,该机构的借款人往往拖欠还款或拒不还款,导致该机构的不良贷款率居高不下。面对如此头疼的问题,该机构将部分贷款数据开放,诚邀大家帮助他们建立风险识别模型来预
机器学习AI算法工程
2022/04/18
1.8K0
车辆贷款违约预测 Top1(2021科大讯飞)
QQ浏览器视频相似度算法
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 视频Embedding采用稠密向量能够很好的表达出视频的语义,在推荐场景下对视频去重、相似召回、排序和多样性打散等场景都有重要的作用。 本任务从视频推荐角度出发,提供真实业务的百万量级标签数据(脱敏),以及万量级视频相似度数据(人工标注),用于训练embedding模型,最终根据embedding计算视频之间的余弦相似度,采用Spearman’s rank correlation与人工标注相似度计算相关性,并最终排
机器学习AI算法工程
2022/03/16
1.2K0
相关推荐
实时监控900多家中国企业的新闻动态
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文