当我遇到这个问题时; 我很困惑。 我打开操场检查他们的行为。 我很惊讶地知道很多事情,所以逐步写下我的知识。 首先,我声明了3个字符串,如下所示, var str1:字符串! var str2:字符串? var str3:字符串 打印(STR1)->无 打印(STR2)->无 print(str3)//初始化之前使用的变量’str3’。 在打印str3出现错误,这意味着我们必须先初始化所有非可选变量,然后才能使用它们。 需要注意的是str1为nil 。 现在让我们初始化为零 str1 =零 str2 =零 str3 = nil //无法将nil分配给’String’类型 再次,我得到了str3错误,这意味着我们无法将nil分配给非可选变量。 虽然我们可以将str1初始化为nil 。 然后我通过分配一些值来打印它们, str1 =“字符串” str2 =“字符串” str3 =“字符串” print(str1)->字符串 print(str2)->可选(String) print(str3)->字符串 str1正在打印“字符串”。 怎么样? 现在最后检查 print(str1!)->字符串 什么? 说真的,我可以拆开str1 。 我以为,它已经解开,所以不允许我解开。 我真的被这个练习所吸引,现在我已经理解了这些声明之间的区别。 让我们来看看, 可选 -表示常量或变量允许为“无值”。 可以使用可选绑定检查它们,以查看该值是否存在。 隐式解开可选 -有时我们知道,可选在初始化后将始终具有价值。 但是在声明它的时候,我们不确定它的价值。 […]
在创建应用程序模型时,会遇到没有价值的属性。 使这些属性成为所有可选类型是很诱人的。 但是,如果以后再遇到它们,您是否仍然知道这些可选参数代表什么? 可选选项可以具有不同的含义。 可能是: 没有价值 该值尚未被检索 假设我们从User的下一个模型表示开始: struct用户{ let id:整数 命名:字符串 让电子邮件:字符串 var朋友:[用户]? 让地址:字符串? 让网站:URL? } 如您所见,我们有一个带有数组类型的可选属性。 这是一个重复的空状态:我们可以使用空数组表示空状态,也可以使用nil值。 因此,在这种情况下,我们应该删除可选选项,并使用一个空数组表示空状态。 想象一下,我们有一个带有调用的API,该调用可一次检索用户的所有数据。 在此调用旁边,我们还可以调用以检索一些博客,这些博客也发送有关用户的一些信息。 但是在这种情况下,仅发送用户的id , 名称和电子邮件 。 我们想要代表可以通过相同类型的第一个或第二个调用在应用程序中检索的用户。 我们可以做的该模型的第一个改进是表示根据我们进行的调用,某些属性可能同时丢失。 在用户的当前表示形式中,每个属性的可选变量中都隐藏有重复信息:是否检索信息。 干! 为了防止这种情况,我们可以为这些属性在User类型的范围内创建一个新的结构Details 。 struct用户{ let id:整数 命名:字符串 让电子邮件:字符串 var详细信息:详细信息? } 扩展用户{ 结构详细信息{ var朋友:[用户] 让地址:字符串 让网站:URL? } } website属性仍然是可选的,但是在这里nil表示用户没有网站,也没有填写值。 让我们看看friends属性。 实际上,我们从API的JSON中获得了这个friends属性的URL,以检索该用户的朋友作为单独调用的响应。 因此,可以获取或不获取值,我们可以用枚举来表示。 我们也可以使其通用,以便与依赖于API的第二次调用的其他类型一起使用: struct FetchableValue { 让网址:URL […]
带有可选,函数和字符串的Swift简介 在本文中,您将学习Swift的以下基本知识: 可选,可选绑定,强制展开 2.功能 3.创建数组 4.创建字典,迭代操作 5.字符串运算 6.条件语句,Switch语句,if语句 介绍Swift Swift是Apple开发的新编程语言。 如果您是一名Objective-C程序员,Swift将使您感到熟悉。 它遵循与Objective-C相同的方法名称和参数。 它还包括来自Objective-C的可可框架。 此外,Swift代码可以与Objective-C代码一起使用。 Swift代码更加简洁,执行速度更快且易于调试。 自从Swift引入以来,人们一直在谈论它,并且大多数人发现它易于适应并且更具表达力。 即使是具有数十年经验的Objective-C开发人员,也会发现它简单而直观。 它是如此简单却强大,以至于一段时间后您会感觉到它是第二自然。 Swift简洁,直观且执行速度更快。 最重要的是,它已被广泛采用,github上有成千上万个存储库,您可以在堆栈溢出时找到大多数问题的解决方案。 在进行快速编程之前,我希望您了解Apple引入的一种伟大工具,该工具仅用于学习和尝试这种新语言。 它被称为游乐场。 太好了,您不必担心创建项目或构建项目来编译代码了。 您可以直接尝试使用快速代码并立即查看结果。 这使学习体验更加有趣。 因此,我建议您使用Playground立即尝试和调整代码。 在学习概念的同时尝试自己编写代码是学习编程时最重要的事情。 正是这样才能保持创造力,创新和即兴创作的乐趣。 您不必单独下载或安装它。 您只需要Xcode。 安装Xcode并将其打开后,您将看到以下窗口 要创建一个Playground文件,请选择第一个选项,即Play入门。 您将被带到此窗口: 您可以在这里命名您的Playground文件,并选择iOS或OS X的平台。单击下一步时,系统将要求您选择Mac上的位置以保存项目。 根据您的方便选择,然后单击完成。 现在,您的Playground文件已准备就绪,可以进行编码了。 您将看到以下窗口: 这是一个普通的游乐场文件。 与您的Xcode项目中的类相似。 在左侧,您将看到一个包含字符串“ Hello,Playground”的变量。 在右侧,您会在该行上看到结果或变量的值。 您可以在运行时立即查看任何计算和运算的结果,如下图所示:- 那么,为什么还要浪费时间呢? 让代码! 因此,让我们从基础知识开始: 变数 快速创建变量 在这里,我们定义了一个变量“ myName”,使用var关键字,变量名和冒号“:”来完成此操作。 冒号后面是数据类型,在这种情况下,数据类型是String ( String是Swift引入的新数据类型)。 我们为该变量分配一个字符串值“ […]
嘿大家! 我想写这篇简短的文章,因为我喜欢使用这种技术,它并不是最明显的实现。 因此,如果您在Swift中工作了2分钟以上,那么您可能已经看到Optional了 。 有很多很棒的文章解释了这些东西是什么以及如何使用它们。 我不会在这里讨论。 我想说的是恐惧 表达式从“字符串”隐式强制转换 去任何’ 每次尝试打印Optional时出现的错误。 好的,这不是世界上最重要的用例,但是如果没有它,您的代码将被警告打乱,或者每次执行此操作时都必须将所有内容转换为Any类型。 所以下面的实现: let val:字符串? =无 // … print(val)//警告在这里生成 会成为 let val:字符串? =无 // … print(val as Any) 如果您有很多这样的事情,或者如果val的类型发生变化,那么这将成为一场噩梦。 因此,什么是优雅的修复程序,因为它绝对没有使用String(describing: val) ,这是Xcode中建议的修复程序。 我很高兴你问😁。 为了解决这个问题,让我们在Optional类型上编写一个扩展名,是的,这是完全可能的,而且非常酷! 让我们开始编写以下代码: 扩展名可选,其中Wrapped ==字符串{} 在上一个代码块中,我们扩展了Optional类型,其中Wrapped类型是String 。 Wrapped属性是使用Optional声明(Swift Generics)声明的泛型类型的标识符。 这意味着我们在此扩展中编写的任何代码仅可用于可选的字符串类型( String? )。 因此,让我们实现我们的扩展。 在下一个代码块中,我们将添加一个名为valueOrEmpty的新属性。 这是代码: 扩展名可选,其中Wrapped ==字符串{ var valueOrEmpty:字符串{ 守卫让自己解开=自我否则{ 返回“” } 退回包装 } […]
最近,我在Swift中学习了可选内容。 的种类。 我仍然不确定我是否正确,所以我将用简单的语言向您介绍可选内容。 这是一个关于名叫裁缝的女孩的故事,她真的想找到一个梦her以求的男人。 一天,她打开了火种,发现了4场新比赛:本,帕特里克,约翰和山姆。 让本:字符串 让帕特里克:弦! 让约翰:字符串? 让萨姆:字符串? 她还很年轻,喜欢神秘的事物,所以Ben对她来说太无聊了:她知道它们会约会一年,然后他会向她求婚。 帕特里克在个人资料中写道,他正在寻找妻子。 她认为他对她太直率了。 矛盾的女性心脏! 但是约翰和山姆的一切都不一样。 一个是花花公子,另一个是一个人。 她可能会得到一个建议,或者……什么都没有。 有点吓人但是有趣…… 约翰=“嫁给我,裁缝!” 要么 约翰=零 当然,她可以用力解开并假装一切正常。 结婚(约翰!) 但是在这种情况下,一个美丽的早晨,她可以发现约翰失踪了,她的心和生命将被打破。 裁缝想在某年(也许不是现在)几年内结婚。 她绝对不想成为一个大佬! 所以她决定和约翰约会。 漂亮的脸蛋,好地方。 但是如何更好地了解他,又不花她的青春去伤心? 裁缝决定用谷歌搜索它。 第一个建议是“问他是否要嫁给你” 。 因此,如果一个男人希望结婚,则可以毫无顾忌地开始与他约会。 如果john!= nil { 让happyLife =约翰! } 约翰大吃一惊,整个晚上都保持沉默。 他喃喃自语,他需要考虑这一点。 当然,他第二天不给她打电话。 再也不会。 有时候,直率并不是最好的朋友。 在此之后,Tailor感到失望和困惑。 但是那里留下了山姆。 幸运的是,她认识了山姆的最好的朋友汤姆。 所以她决定问他山姆是否有一天要嫁给她。 如果让汤姆=山姆! {让weddingProposal =汤姆} 当然,在这种情况下,汤姆也参与了他们的关系,这是不好的。 裁缝无意中伤害了汤姆,因为他喜欢汤姆,而他的自尊心受到了破坏。 该怎么办? 她很困惑,因此问汤姆一个模糊的问题,山姆是否考虑过婚姻。 如果sam?.length> […]
如果您是iOS开发人员,则可能遇到过敏捷的语言。 到那时,你们大多数人可能已经迅速成为专家。 当我开始学习Swift时,很难理解Swift中的可选内容。 因此,让我们了解它们是什么。 可选选项是快速编码的基本组成部分。 简单起见, 我们可以说可选函数帮助我们将好的代码与坏的代码分开,从而防止崩溃 。 不同的编程语言使用不同的预防措施来避免崩溃。 但是在大多数情况下,大多数人是无助的。 但是,在这种情况下,Swift更为实用,而可选选项将帮助您使代码免于崩溃。 嗯,这不是100%正确,但是它将帮助您编写更好的代码。 可选项不包含任何值或保留一些值 。 可选选项允许存储nil ,也就是没有值。 Optional类型是具有两种情况的枚举。 Optional.none等效于nil文字。 Optional.some(Wrapped)存储包装的值。 简而言之,可选是通用枚举。 为了便于理解,请看以下代码: 因此,optional是一个通用枚举,包含2种情况, none和some和某些方法。 请参考Apple文档以获取更多详细说明。 因此,让我们开始吧。 打开您的xcode并创建一个新的游乐场。 让我们开始前进。 //:游乐场-名词:人们可以玩耍的地方 导入UIKit var numberOfCrashes:整数? 请看上面的代码。 末尾的问号(?)表示它是一个可选变量。 如果在变量声明的末尾看到一个问号,请理解它可能包含也可能不包含值。 因此,在程序的某些部分,您不知道变量是否有值,然后将其标记为可选。 现在,尝试打印变量’ numberOfCrashes ‘的值。 打印(numberOfCrashes!) 变量末尾的感叹号(!)用于展开该值。 此时,代码将崩溃。 这是因为,您只需要强制解开一个没有值的可选变量即可。 您只是选择了一个可选变量,然后说:“嘿! ,给我以价值”,然后您尝试使用它。 但是,如果执行此操作,并且变量中没有值,则程序将崩溃。 //:游乐场—名词:人们可以玩耍的地方 导入UIKit var numberOfCrashes:整数? numberOfCrashes = 3 打印(numberOfCrashes!) 但是,如果在强制解开值之前为变量设置了值,则代码不会崩溃。 但是这种方式实际上是在滥用可选变量。 […]