Tag: 编程

学习Swift和iOS开发第2部分:Swift简介

在上一篇文章中,我们学习了如何安装Xcode。 在本文中,我们将使用Xcode深入介绍Swift的一些基础知识。 Swift是使用现代方法构建的通用编程语言,用于安全性,性能和软件设计模式。 如果您不具有计算机科学或编程背景,那么您可能会想:“那太好了。 但是这是什么意思? Trust”当我们说这意味着您的编码学习生活比以前容易得多时,请相信我们。 Swift是一种非常优秀的第一门编程语言,因为它的语法通常很容易理解。 在线上还有大量资源(例如教程(如本教程!),YouTube视频,博客,论坛等)可以帮助您学习Swift。 本章是后续各章的前提。 它主要供您参考和参考。 稍后我们将详细介绍。 让我们开始吧! 启动Xcode,我们将在一个称为Playground的地方工作。 只需打开Xcode并选择“游乐场入门”。 然后选择空白。 或从“文件”>“新建”>“游乐场” 命名并保存您的Playground,然后您应该会看到以下内容: 那么,这是什么游乐场? 游乐场是一个互动的工作环境。 我们可以编写代码,并立即查看我们的代码结果。 这使其成为学习和实验的好工具。 您可以在本文其余部分中看到的代码可以添加到您的Playground中以进行后续操作! 变数 每种编程语言都使用变量。 它们就像一个容器,可让您存储许多不同类型的数据。 要声明变量,必须使用关键字var : var讯息:String =“ Hello,World!” 我们刚刚写的内容告诉我们的计算机,我们想要创建一个容器(变量),其名称message为String类型,其中包含文本“ Hello,World!”。 Swift的惊人之处在于它包含了一个名为Type Inference的功能。 这意味着Swift可以分析变量内的数据(文本,数字,真/假等)并推断其类型。 要对此进行测试,只需在声明变量message之后删除String即可: var message =“你好,世界!” //类型推断的字符串 正如您在上面看到的,我们从未明确告诉我们的计算机我们希望variable为String但是由于Hello, World!周围的引号Hello, World! ,Swift可以推断出它的类型。 变量之所以称为变量,是因为它们是可变的,可以更改其值。 例如,如果我们想更改message变量的值,则需要编写变量名并按如下方式更改其值: var message =“你好,世界!” message =“你好,斯威夫特!” 现在message等于“你好,斯威夫特!”。 常数 有时,有些价值是您永远都不想改变的。 例如您的生日或您的家乡的名称。 […]

成为开发人员

没有计算机科学背景 品尝编程 我在高中期间学习了解决算法问题。 这是我第一次编程经验。 我对使用C ++感到非常兴奋。 它产生了有意义的结果。 我在高中部门的首尔信息奥林匹克竞赛中获得了大奖。 主修业务管理并作为数据分析师开始工作 我搬到美国学习业务管理,是因为我想学习更多有关管理组织以解决实际问题的知识。 这是我一生中非常愉快的经历。 有非常有组织的步骤来管理项目和人力资源。 大学毕业后,我开始担任商品数据分析师3年。 我已经使用Excel VBA和SQL进行报告。 这是处理大量市场研究和数据分析的一切。 我感觉就像是一家生产报告的工厂。 这就是为什么我开始iOS开发的原因 但是,除了通过创建报告来支持管理团队之外,我希望看到更现实的结果。 当时,我的妻子正努力使用iPhone Calendar App。 所以我想成为一个超级可爱的家伙,解决她的问题。 我开始研究iOS开发,终于在App Store上成功发布了我的第一个应用程序。 这是我的每日备忘录。 我的每日备忘录:在App Store上的内容 阅读评论,比较客户评分,查看屏幕截图,并详细了解“我的每日备忘录”。 下载“我的每日备忘录”并… itunes.apple.com 我的特长 英语是我的第二语言。 我在学习英语时学到的是,语言只是表达我的知识或思想的一种技能或方式,而不是目的。 (当然,有些人将语言用作翻译或翻译之类的目的。)编程语言是相同的。 它是我可以通过使用它表达我的想法的一种语言。 编程主要是关于如何为人们提供效率和便利,而不是技巧或技术本身。 如果说编程语言不是目的,那么我在大学学习业务管理的4年经验就是一种优势,而不是劣势。 您可以考虑一所法学院。 法学院的学生来自各个专业。 那里的主要目的是作为一名研究生从法学院毕业。 学过各种专业的人有可能通过进一步研究法律来改善社会对许多领域不了解行业的状况,从而丰富法律的解释,因此结果与实际不同。 我认为非计算机科学专业的人们将能够通过将他们的知识与编程相结合来找到市场想要的东西。 通过学习四年的业务,我了解了如何改变世界的见解,并且可以通过查看服务运营商和消费者的职位来进行编程。

Swift 4.1:标语牌中的新增强功能

Swift 4.1现在已经正式发布,您可以浏览下面的图片所实现的增强功能,这些信息来源于—官方Swift博客 增强功能1:SE-0143条件符合性 条件一致性表示这样的概念,即泛型类型仅在其类型参数满足某些要求时才符合特定协议。 例如,仅当Array集合的元素本身是Equatable时,才可以实现Equatable协议 增强功能2:SE-0157支持对关联类型的递归约束 该提议解除了对协议中关联类型的限制。 它们的约束将被允许引用任何协议,包括依赖于封闭协议的协议(递归约束)。 增强功能3:SE-0185综合可量化和可哈希化的一致性 开发人员必须编写大量样板代码来支持复杂类型的相等性和哈希性。 该提议为编译器自动合成符合Equatable和Hashable以减少样板,在已知可能生成正确实现的部分场景中提供了一种方法。 增强功能4:SE-0187引入Sequence.compactMap(_ 🙂 现在不建议使用Sequence.flatMap方法,并且可以使用不同的名称(可能更具描述性)使用相同的功能。 增强功能5:SE-0188使标准库索引类型可哈希化 关键字路径表达式现在可以包括下标,以引用集合和其他可下标类型中的各个位置,但仅当下标参数为Hashable 。 为了提供最大的实用性,标准库索引类型都应添加可Hashable一致性。 增强功能6:SE-0191从集合中消除IndexDistance 从Collection消除关联的类型IndexDistance ,并将所有用法修改为具体类型Int 。 对于其他更新,您可以在我的Twitter句柄@NavRudraSambyal的Twitter上关注我。 要跟随我对RxSwift的工作,您可以找到我的书《 Swift 4中的反应式编程》的链接。 感谢您的阅读,如果发现有用,请分享share

迅速。 功能阵列

Swift为iOS开发带来了很多机会。 其中有一些非常有用的功能挂钩。 有些人立即将函数式编程与复杂的数学和M字相关联,但事实并非如此。 函数是函数编程中的真正力量。 在本文中,我们将介绍如何使用其中的一些功能,以使您的日常Array例程更加舒适,避免仅通过使用函数避免代码重复和不必要的键入。 回顾我的一位同事,我们讨论了下一个功能: 现在该回到我们的摘要了。 在第2行中,我们为将在第3行中使用的函数形成一个元组。因此,在第3行中,只要意识到offerCellReactorFactory参数是元组而不是,就可以使代码更甜美 self.offerCellReactorFactory($ 0.0,$ 0.1) 我们可以写 self.offerCellReactorFactory($ 0,$ 1) 那就对了! 元组的元素是函数的独立参数,因此闭包中不需要丑陋的点符号。 这是真正的魔术发生的地方。 类型推断是语言自动检测表达式类型的能力。 在声明变量时,我们每天都在使用它,但是它具有更强大,更漂亮的应用程序。 还记得我们的UIViewController.viewDidAppear声明吗? 该viewDidAppear变量存储一个函数,Swift能够理解该函数是什么。 很酷,但还有更多。 首先, Array的map函数采用一个非转义的闭包作为参数,因此不需要[unown self]。 现在,注意指针,第三行变成 .map(offerCellReactorFactory) 妈呀 在这里,类型推断为我们完成了所有工作。 Swift能够找出该特定表达式中的所有类型,因为我们的元组为该函数形成正确的参数,并且map本身采用了将元组转换为某种东西的函数。 我们只是节省了自己的打字时间。 此功能具有许多优点,从涉及重命名的较少键入和易于重构开始,到使用类型正确的表达式结束。 希望,这也阐明了为什么类型转换和强制转换很差的问题 。 谈论重命名…让我们将offerCellReactorFactory重命名为makeOfferCellReactor🙂 看看我们如何在第2行和第3行中应用两个映射函数。这种应用称为管道 。 实际上,可以将管道调用应用于某些值的一系列函数。 坦白说,我们的问题是功能的流水线应用。 但是此应用程序被变量声明破坏了。 这不好吗? 不,不是真的,但是Array不仅是像Int这样的普通类型。 数组是容器类型。 它通常封装许多元素,并且该数目在计算过程中可能会发生变化。 这被称为非确定性行为。 为了保留不确定性, 数组类型具有特定的属性。 他们为我们提供了我们刚刚描述的出色的管道应用程序功能。 您是否注意到地图返回了另一个Array ? 这样可以进一步应用诸如map , compactMap , […]

Swift中鲜为人知的功能

数组 这是使用数组文字语法或完整类型名称语法声明数组时获得的默认数据类型。 此数组类型已针对在Swift Array和NSArray类型之间进行转换进行了优化。 让水果= [“苹果”,“猕猴桃”,“梨”] 让空= Array () 它是迄今为止Swift标准库中使用最广泛的数组类型。 并且由于与Objective-C的自动桥接,对于大多数返回数组的API类型,这是推荐的选择。 这样,API的使用者就不必担心会返回意外的类型。 如果数组的元素已经是class或@objc协议的实例,则从Array桥接到NSArray会占用O(1)时间和O(1)空间; 否则,将花费O( n )时间和空间。 但是,我们确实有其他一些类型的数组,在某些情况下可能会有用。 检查标准库中一些常用功能的实现以深入了解Swift的作者如何实现这些功能以及它们利用的数据类型类型是很有趣的。 连续数组 三种阵列类型中最快的。 ContiguousArray始终将其元素存储在内存的连续区域中(就像C旧式数组一样)。 这与标准Array类不同,后者可能根据元素类型使用连续内存或NSArray实例。 如果要存储class或@objc协议类型,而无需桥接到Objective-C或调用Objective-C API,则ContiguousArray通常会更快。 实际上, ContiguousArray在Swift标准库中出现了41次。 grep “ContiguousArray<” * | wc -l ContiguousArray有几种有趣的用法,例如, Sequence上的Swift的map和filter函数使用ContiguousArray作为其实现的一部分。 让我们看一下标准库代码。 Swift标准库中的地图和过滤器 由于我们在每个元素上使用map / filter函数,因此我们预先知道数组的大小。 声明一个大小为ContiguousArray的数组,可以避免在处理map函数时扩展数组以容纳更多元素的需要。 这是效率优化。 只有在填充数组超出初始容量后,我们才使用Swift的append函数,该函数会根据需要自动调整数组的大小。 数组切片 ArraySlice类型使您可以快速有效地对较大数组的各个部分执行操作。 ArraySlice提供与Array相同的接口,允许大多数阵列操作。 ArraySlice通过在现有阵列的一部分上显示视图来实现此目的。 这使您可以执行诸如将数组拆分为不同部分的操作,而无需实际创建新数组或复制数组元素。 luckyNumbers = [38,38,41,4,35,15,41,42,12,29,15,55,69,76,25,13] 让中点= luckyNumbers.count / 2 让firstHalf […]

Swift中有关运算符的一切

基本运算符,溢出运算符,高级运算符,范围运算符,自定义运算符。 在本教程中,您将迅速学习有关运算符的所有知识。 使用它们非常容易,因为我们可以将它们用于项目中类型(模型对象)的高级用例。 您可以 在此处 阅读基本介绍 ,但不需要了解本教程。 →术语: 运算符是用于检查,更改或合并值的特殊符号或短语。 运算符影响的值为操作 数 。 在表达式“ 2 + 4 = 6”中,“ +”符号是二进制运算符,其两个操作数分别是值2和4。 运算符是一元,二进制或三元运算符: 一 元运算符: 一元运算符对单个目标(例如+1 )进行操作。 一元前缀运算符紧接在其目标(如!b )之前,一元后缀运算符紧随其目标(如c! )之后。 Binary: Binary运算符在两个目标(例如3 + 5 )上操作,并且是不固定的,因为它们出现在两个目标之间。 三元运算符: 三元运算符可针对三个目标进行操作。 与C一样,Swift也只有一个三元运算符,即三元条件运算符( a?b:c )。 注意: 在这里,我将用示例提及所有运算符。 对于简单的例子,除了示例以外,没有其他解释。 如果您想了解更多有关它们的信息,只需遵循本教程底部提供的链接。

iOS中的线程[第1部分] GCD —快速方法

线程是iOS中重要的核心概念。 作为程序员,了解线程如何工作以及如何利用它非常重要。 启动应用程序时,它将在主线程或UI线程上运行。 如果尝试在主线程中执行耗时的任务,它将阻塞UI,这意味着UI会停止响应一段时间,从而给用户带来糟糕的体验。 为了避免这种情况,我们可以使用多线程在其他线程中执行耗时的任务,从而不会阻塞UI。 假设您在viewDidLoad()中有一个函数需要花费5秒钟以上的时间来完成和更新您的集合视图。 在此,UI将被阻止至少5秒钟,并且不会显示集合视图。 这是一个坏习惯。 耗时的任务应在其他线程(后台线程)中执行。 快速地,我们使用GCD-中央分配器来访问线程。 快速地,有不同类型的线程: DispatchQoS-服务质量,它确定线程中任务的优先级。 让我们看看如何在线程中运行任务。 重要的是您需要始终在主线程中更新UI。 否则,可能会导致崩溃 这是快速线程的基本工作。 一旦了解线程如何工作,就可以深入研究它。 如果您喜欢阅读这篇文章,请分享并鼓掌。

如何在Xcode中轻松找到未使用的Swift代码

保持理智,并使用此ruby脚本轻松删除Xcode中未使用的代码。 将脚本添加到项目主文件夹中名为ruby.rb的ruby文件中。 您可以使用以下命令在终端中运行代码: $ ruby​​未使用.rb 终端将显示项目中未使用的函数和变量的列表。 如果您希望在Xcode中轻松显示它,请导航到“ 构建阶段”下的项目运行脚本。 添加以下shell脚本以自动运行未使用的脚本: file =“ unused.rb”如果[-f“ $ file”] thenecho“ $ file找到。”红宝石未使用。rbxcodeelseecho“ unused.rb不存在” fi 之后运行您的项目,未使用的代码警告应在“构建时间警告”窗格中可见。 请记住,此代码将有很多误报(协议,函数和系统委托)和误报,因此在删除任何“未使用”的委托方法(例如collectionView的numberOfSectionsInCollectionView)时要小心。 如果您不想用此脚本警告输出来打扰同事,请将未使用的.rb文件添加到您的项目.gitignore中 (上面的run脚本在运行之前检查其存在) 。 如果该脚本不适合您,请查看Ian Leitch的Periphery App。 感谢Paul Taykalo的真正有用的脚本。 跟我来了解有关Xcode,Swift和iOS开发的更多提示 如何在Xcode中调试SceneKit和ARKit SceneKit是我最喜欢的Apple iOS框架之一。 它允许各个级别的开发人员创建3D… medium.com

X代码中使用Objective C语言的数据类型(int,float,char,string,BOOL)

变量表示信息性名称,该名称存储任何数据类型的值。 数据类型是指变量保存的数据类型,并且可以对其应用数学,关系或逻辑运算的类型而不会引起错误。 例如,字符串是用于对文本进行分类的数据类型,而整数是用于对整数进行分类的数据类型。 让我们看看在目标C语言中使用的主要数据类型。 1. int保持数字值不带小数 整数数量= 10; 此处int =数据类型,数量=变量,10 =变量值 NSLog(@“ quantity =%d”,quantity); //使用带有%d的NSLog打印int值 输出:数量= 10 2.浮点数保存带有十进制的数字值 浮动pi = 3.14; 此处float =数据类型,pi =变量,10 =变量值 NSLog(@“ pi的值=%f”,pi); //使用带%f的NSLog打印浮点值 输出:pi的值= 3.14 3. Char保留单个字符值 char a =’A’; 这里char =数据类型,a =变量,A =变量值 NSLog(@” a的值=%c”,a); //使用带有%c的NSLog打印浮点值 输出:a = A的值 4.字符串也包含单个字符和文本。 NSString * strName = @“ Verma Mukesh”; 此处String =数据类型,strName […]

Swift Talk从SwiftyJSON Advanced MVVM开始Alamofire [第7集]

Swift讨论将继续进行有关高级MVVM的讨论,并介绍使用Alamofire进行网络连接以及使用SwiftyJSON进行JSON解析的方法,以及用于在Swift 4中处理网络的两个出色的第三方库。 RxSwift即将上映。 很有趣,不是吗? 订阅并注意更多乐趣! 请观看以下链接提供的所有剧集: 第1集-https://youtu.be/fH9paWpCvQsEpisode 2- https://youtu.be/qLbUzwZrQjcEpisode 3 — https://youtu.be/qLbUzwZrQjcEpisode 4 — https://youtu.be/b1GadsUtB9s第5集- https://youtu.be/EZtCOQyRK7w第6集- https://youtu.be/T0yT6J_Mp9U 观看其他TOP编程教程,网址为: youtube.com/c/letscodeeasy 请关注我们: http://letscodeeasy.com www.facebook.com/letscodeeasy https://twitter.com/letscodeeasy