Swift Playgrounds Study:第24天

结果:『学习代码2』 数组 ,附加删除的值并修复数组超出范围的错误。 这些任务令我激动。 当我解决该问题时,我感觉很好。 这是我“附加删除的值”的溶剂 //在第2行中创建一个包含所有坐标的数组。 //创建一个空的坐标数组。 让allCoordinates = world.allPossibleCoordinates //创建两个[Coordinate]类型的空数组。 var row2 = world.row(2) var testArray:[坐标] = [] 因为我在1…12 { 对于第2行中的坐标{ world.place(Block(),at:坐标) } //删除坐标并将其附加到您的空数组中。 testArray.append(row2.remove(at:0)) } //为添加到空数组中的每个坐标放置一个字符。 用于testArray { world.place(Character(),朝着:向南,在:坐标处) } “修复阵列超出范围的错误”是焦点调试。

“我认为这是我曾经用过的最友好的语言。” 与道格拉斯·姜(Douglas Kiang)

2:“我认为这是我曾经用过的最友好的语言。” 与道格拉斯·姜(Douglas Kiang) 点击/点击下面的链接以在浏览器中收听 。 https://cast.rocks/player/7212/Episode-2-Doug-Kiang.mp3?episodeTitle=2%3A%20’I%20think%20it’s%20about%20the%20Friendlyt%20language%20I’ve%20ever% 20coded%20in。’%20with%20Douglas%20Kiang&podcastTitle = Swift%20Teacher&episodeDate = March%2021st%2C%202017&imageURL = https%3A%2F%2Fcast.rocks%2Fhosting%2F7212%2Ffeeds%2F72WBK = jpg% 2Fitunes.apple.com%2Fus%2Fpodcast%2Fswift-teacher%2Fid1213030529 通过RSS订阅 在iTunes中订阅 在这一集中,我采访了道格拉斯·姜。 道格拉斯(Douglas)是一位演讲者,老师和讲习班演示者,在每个年级的独立学校中都有超过25年的教学经验。 他目前在Punahou学校任教,在那里他教授计算机科学并在一对一计划中支持教师。 他还是EdTechTeacher.org的主旨发言人和演讲者。 道格拉斯(Douglas)拥有哈佛大学的技术,创新和教育硕士学位,并正在攻读全球教育领导力博士学位。 他是Google认证培训师和Apple杰出教育家。 道格拉斯和我在教授Swift以及编码,应用程序开发和设计之间的联系方面进行了精彩的交谈。 Douglas Kiang-Twitter 苹果杰出教育者计划 Swift开源 每个人都可以使用Swift课程(老师)(学生)编写应用程序开发代码 斯威夫特游乐场应用 WWDC 2017奖学金Punahou学校 设计优先编码 Douglas Kiang和Mary Kiang将编码作为核心技能 Xcode 统治 您还可以在我的博客上找到表演说明和其他信息: 迅捷老师博客

通知中心快速介绍

开发iOS应用程序时,有许多方法可以在类之间传递数据和进行通信。 到目前为止,我主要依靠委托和segue在班级之间进行交流并传递数据。 但是,我最近遇到了另一个很棒的工具,称为“通知中心”,可以完成工作(不,这不是用于发送推送通知)。 Notification Center非常简单,为说明其工作原理,我将逐步介绍一个超级简单的应用程序。 该应用程序包含2个视图控制器。 目标是在Second View Controller上具有“发送通知”按钮,更改First View Controller上的文本标签,并在处理过程中将其传递给一些数据。 将通知中心视为驻留在您的应用程序中的大型手机信号塔。 当一个类(例如,本示例中的视图控制器)需要打给另一类的电话时,它将向通知中心发送信号,并提供与该信号相关的特殊键。 如果将任何其他视图控制器设置为该特殊键的Notification Center 观察者 ,则它们可以侦听信号,如果接收到信号,则它们可以完成自己的某些任务。 让我们在代码中看到这一点。 我们将从“第二个视图控制器”开始,因为这是将发送信号,为该信号分配键并传递数据的视图控制器。 在这里,我创建了一个用于说明用户数据的变量。 这个变量是一个字典[String:Any],您将明白为什么我现在把它做成字典。 这里的目标是将用户数据字典从第二个View Controller传递到第一个View Controller,然后让First View Controller对这些数据执行某些操作。 didPressSendNotification Action是神奇的地方。 一旦用户点击“发送通知”按钮,我们将把帖子发送到通知中心,并为该帖子分配一个特殊键(即Notification.Name)。 我们还将在这篇文章中传递数据。 数据必须为[AnyHashable:Any]形式,并传递到参数“ userInfo:”中。 这就是为什么我们创建字典来说明我们的用户数据的原因。 Notification.Name是一个字符串,可以将其设置为我们喜欢的任何内容。 这样,通知中心便知道如何将接收到的所有信号定向到正确的观察者。 我们只需要确保我们的观察者(即First View Controller)将侦听来自与该特殊键(即“通知名称”)相关的通知中心的信号即可。 让我们跳到“第一视图控制器”以确保其正确接收信号。 First View Controller中的代码如下所示: 在viewDidLoad中,我们将确保将“第一视图控制器”设置为观察者,并确保它观察到特殊键“ passUserName”的信号。 一旦收到信号,我们还将为它提供功能。 请注意,“ using”参数是一个采用类型(通知)->无效的闭包。 因此,我创建了另一个类型为(Notification)-> Void的函数,并将其命名为changeTextLabel。 在changeTextLabel函数中,我们可以从传递的字典数据中提取键“名称”的值,然后可以使用该信息来更新标签。

IBM通过Swift获得成功

IBM因成为技术领域笨拙的老人而臭名昭著。 它们已经存在了很长时间,并且(不包括IBM Watson)在寻求可以迎合时代精神的新创新方面一直落后于他们。 随着IBM最近为Swift推出的IBM Bluemix Runtime(IBM的多面云平台即服务),他们证明了他们的确表明自己确实可以变得肮脏不堪,并与我们那些ra脚的年轻人混在一起。 对于那些不熟悉的人,Swift是苹果的宝贝。 这是他们为macOS,iOS,OSOS开发的编程语言,基本上就是您可以想到的任何现代Apple OS。 简洁,自然的语言特性使它在编码社区中大受欢迎,尤其是对于那些有志于为Apple OS做出任何贡献的人(移动开发人员,我在看着你!)。 它适用于客户端和服务器端开发,需要较少的内存使用,并且总体上减少了硬件磨损,所有这些都导致了一种编码语言,使每个人的生活变得更加轻松。 苹果公司使学习变得简单(和FuN !!!),使Swift更具吸引力。 以iPad上的Swift Playgrounds应用程序为例,在该应用程序中,用户可通过围绕一个谜题的小头像来学习如何使用Swift。 可爱。 如果您在Quora,Medium或Twitter上关注我,那么您可能已经注意到我是Swift的忠实粉丝: 最初发布在 DamianEsteban.com

iOS面试问答

在这个故事中,我将分享与IOS开发相关的采访问题。 希望您会找到很多有用的信息。 我们为什么应该录用你? 在面试中专注于代码。 您想展示自己的技能,但是最终公司对您对代码的了解以及花费在研究和学习更多时间上的时间感兴趣。 尽管问题和答案可能是技术性的,但记住要向您的准雇主表明您是人也是很重要的。 为技术性添加一些色彩,加入您喜欢的开发人员双关语,并了解您的知识-这是一个成功的组合,一定会让您梦想中的iOS演出。 命名用于构建iOS应用程序用户界面的框架? UIKit框架:UIKit框架提供了事件处理,绘图模型,窗口,视图和控件,这些控件是专门为触摸屏界面设计的。 您如何响应应用程序的状态转换? 通过在应用程序的委托对象上调用相应的方法,状态转换可以以适当的方式响应状态更改。 ApplicationDidBecomeActive()方法可用于准备作为前台应用程序运行。 当应用程序在后台运行时,可以使用ApplicationDidEnterBackground()方法执行一些代码,并且可以随时将其挂起。 当您的应用程序移出后台时,可以使用ApplicationWillEnterForeground()方法执行一些代码 当您的应用终止时,将调用ApplicationWillTerminate()方法。 iOS 9中添加了哪些功能? 1 —智能搜索和Siri- 2-更深入的搜索功能 3-旧金山字体, 4 —可选的iCloud Drive应用程序 保留和分配之间有什么区别? 分配创建从一个对象到另一个对象的引用,而不增加源的保留计数。 保留创建从一个对象到另一个对象的引用,并增加源对象的保留计数。 在UIView中指定元素布局的不同方式有哪些? 1 —使用InterfaceBuilder — XIB文件 2-具有NSLayoutConstraint的自己的视图,该视图按自动布局进行排列 3 —(id)initWithFrame:(CGRect)frame方法。 什么是原子性质? 确保始终返回完全初始化的对象。 什么是单例课程? 在应用程序中仅创建该类的一个实例。 Objective-C是否包含私有方法? 否,如果您确实想要私有方法,则需要添加本地类别/未命名类别/类扩展 什么是plist? Plist是指属性列表,该属性列表将数据组织为命名值和使用多种对象类型的值列表 复用标识符的目的是什么? 在UITableView中使用相似的布局但内容不同 “ app ID”,“ Team ID”和“ bundle ID”之间有什么区别?它们分别是做什么用的? 应用程序ID是两部分的字符串,用于标识单个开发团队中的一个或多个应用程序。 该字符串由Team ID和bundle […]

Swift 4和iOS 11中的第三方库入门指南:

当我决定在项目中进行自定义操作时,我总是避免使用第三方库,因为我认为库对项目有害。 例如兼容性问题,速度问题,内存问题等。另外,我感觉自己走了简单的路。 经过对专业机构应用程序的观察和研究,我意识到第三方库是有益的,并且它们被普遍使用。 但是,我们需要注意一些重要的方面,例如GitHub上的库的星号,有关错误和问题的响应率,可理解的使用文档,尤其是实际情况。 确定问题或需求: 请查看以下网址:https://github.com/vsouza/awesome-ios。 我建议对这种非常有用的库进行编译。 几乎对第三方库的每个使用领域,都按标题排序。 例如,如果您搜索有关过渡动画的内容,只需从内容中选择标题。 之后,请看一下对库的简短描述,然后选择一个或多个。 下一步是评估文件,星级和回应。 检查文档是否对您足够,星号可接受,问题回复是否有用等。您将使用此库吗? 好的。 现在转到安装部分。 安装: 从图书馆页面找到吊舱方向,然后按照此视频进行操作。 (您需要安装Cocapods。) https://streamable.com/c1xk4 用法: 首先,如果库有点复杂,我建议下载示例项目并进行分析。 逐步解决工作原理。 第一步可以从分析Main.storyboard结构开始。 观察视图及其类。 在那之后,下一步应该是分析代码。 您分析了所有示例项目并针对您的方案实施了该项目。 无论如何,您的项目无法按预期工作。 您应该错过一些东西: 1-尝试查看每个视图,对象及其类以及连接。 例如,假设您的库与过渡动画有关,那么您绝对应该查看控制器之间的联系。 2-尝试在所选对象的身份检查器中查找“用户定义的运行时属性”。 3-您是否检查了由图书馆超级班级定制的班级? 你能做什么? 读。 使用CMD + Click(跳转到定义)功能并读取几乎每个功能上方的所有注释行非常重要。 如果我举一个简单的例子,您可以执行CMD +单击并跳转UITableViewDelegate,UITableViewDataSource,UIScrollViewDelegate等上的定义…除非这不足以解决回到GitHub上您的图书馆的问题页面并搜索已定义的关键字您的情况简要。 仍然找不到解决问题的方法吗? 然后,现在您可以打开一个新期刊。 请确保您的句子和代码清晰。 在本文中,我试图解释第三方库的使用和调试的基本逻辑。 在下一篇博客文章中,我计划编写一些非常有用的库,这些库可以简化您的工作。 如果您有任何建议,请随时说! 希望您喜欢本教程! 另外,我需要您的反馈!

斯威夫特:无财产

TL; DR:UnownedProperties.playground 我们研究了从强到弱到懒惰的各种属性,以及如何观察它们。 接下来是无人财产。 这是一种属性,您可以避免长时间使用而不会遇到任何麻烦。 在过去的一年中,尽管有充分的理由使用它,但我并没有强烈地需要一次使用该无用功能。 无财产的主要目的是防止保留周期。 它的工作原理类似于弱属性,但主要区别在于,弱属性必须是可选的,而无主属性必须是非可选的。 它与弱属性的共同之处在于,无所有权的属性不会增加保留数,这就是为什么它被用来防止保留周期。 它有效地允许使用非可选属性,而无需增加引用的保留计数。 对于代码示例,我创建了一些类来表示乘客,驾驶员和出租车。 出租车的每个实例都需要驾驶员,而乘客是可选的。 Taxi类包含一个函数,该函数允许将驱动程序属性更改为另一个驱动程序,但无法将该属性设置为nil。 本质上,我们要强制执行的逻辑由编译器维护。 但这很危险。 如果基础价值消失了,那么在Taxi实例中该值将突然为零,因为Taxi实例并未保留该值。 在示例游乐场中,将驱动程序设置为nil的行被注释掉,因为使用nil值打印Taxi实例将导致运行时异常。 对于每天使用无人财产的情况,您可以考虑将闭包保留在自身上的时间过长,从而导致保留周期。 Hector Matos的详细示例对此进行了详细介绍。 重要的是要理解何时可以使用弱者或无人者。 以“驾驶员和出租车”示例为例,规则是没有驾驶员就不能存在出租车。 它根本无法操作来接载乘客。 另一个示例是始终要求银行客户存在的信用卡。 使用无财产时要谨慎。 它们可能是您应用程序中的隐藏杀手。 如有疑问,只需使用弱属性并在使用可选属性之前将其拆开即可。 那是安全的方法。 下一页:枚举和模式匹配 GitHub Gist

我在iOSCon 2017上的演讲经验

我很幸运参加了在伦敦举行的iOSCon 2017,并谈到了Swift中带有协议缓冲区的类型安全Web API 。 这是我第一次在国际会议上发言,但我真的很享受! iOSCon — iOS和Swift开发人员会议这是一年一度的iOS会议,每年都有很棒的演讲者! 因此,我很荣幸在如此出色的会议上担任演讲嘉宾! iOSCon 2017 – iOS和Swift开发人员会议| 2017年3月30日至31日| 伦敦 在英国伦敦举行的为期2天的会议。 iOSCon庆祝iOS的最新发展和最敏锐的头脑。 做… skillmatter.com 如果您对明年的iOSCon感兴趣,那么您绝对应该检查一下! iOSCon 2018 – iOS和Swift开发者大会| 2018年3月22日– 23日| 伦敦 在英国伦敦举行的为期2天的会议。 iOSCon庆祝iOS的最新发展和最敏锐的头脑。 做… skillmatter.com 我的话 我的目标是向许多人介绍协议缓冲区(也称为protobuf)。 因此,我分享了有关protobuf为何如此重要以及我如何在Swift中使用protobuf的经验和知识。 这是protobuf的快速回顾。 类型安全-您可以为HTTP请求/响应定义自己的类型 跨平台一致-您可以通过代码生成器共享模态数据 可扩展-protobuf是一种序列化格式,可以在任何地方使用。 我相信protobuf最适合Swift! 像我上面提到的那样,它有很多好处,所以绝对值得! 如果您对更多细节感兴趣,可以在这里找到我的幻灯片,示例应用程序和视频。 kitasuke / SwiftProtobufSample SwiftProtobufSample –使用协议缓冲区的Swift中客户端/服务器的示例项目 github.com Swift中带有协议缓冲区的类型安全的Web API 技能专区| 2017年3月30日 iOSCon 2017 – iOS会议和Swift […]

Swift 3中的错误处理:尝试,尝试?和尝试!

某些人可能已经熟悉使用关键字try来处理Swift中的错误。 对于那些不知道try是什么的人, try只是一种处理任何给定函数中可能出现的错误的方法。 通常,我们具有“抛出”功能,这意味着它们具有抛出错误的能力,而try是一个简洁的关键字,它使我们能够处理那些错误的可能性。 在构建我们的应用程序时,可以使用三种try形式。 尝试 尝试? 尝试! 如果您对这些变体感到恐惧,那就不要! 而且,如果您不确定要使用哪一个,请不要担心,我已为您覆盖。 正如我之前提到的, try通常与throw函数结合使用,因此我们将讨论一下throw函数,并在实际中使用try关键字。 假设我们正在尝试通过一些JSON进行解析,以便可以将这些数据带入我们的应用程序。 此数据可能由于互联网中断而无法到达我们的应用程序,或者您尝试提取的数据不再存在! 这些都是在我们尝试从API检索数据时可能出现错误的情况。 但是Swift的JSONSerialization方法具有内置函数,默认情况下throws 。 Swift知道我们检索数据的尝试可能会带来一些错误,并创建了一个函数,该函数使我们能够在发生错误的情况下解决该情况。 使用try ,我们的throw函数必须包装在do-catch语句中。 这使我们能够自定义错误处理并根据错误执行特定的操作。 下面我们将使用try来优雅地捕获任何错误。 做{ 让responseJSON =试试JSONSerialization.jsonObject(with:data,options:[])as! [[String:Any]] 完成(responseJSON) } { 打印(“嗯,这里出了点问题。请尝试连接到wifi。”) } 作为开发人员,将try与do-catch语句一起使用可使我们检查有意义的错误,以样式处理它们,并避免用户感到沮丧。 考虑一下,我们是否真的希望我们的应用程序在用户没有任何互联网连接时崩溃,还是我们要让他们知道该应用程序一旦连接到wifi就会继续运行? 在这种情况下,通知会更有帮助,而我们的do-catch语句使我们可以做到这一点。 另一方面,我们也可以使用try?处理错误try? 。 如果您有使用可选控件的任何经验,那么您很快就会意识到该try? 就是这样。 try? 让我们忽略我们的错误,并在我们的函数将其抛出时让它们变为nil。 因此,我们不必将代码包装在do-catch语句中。 但是,如果要分配try?我们是否必须解开变量try? 有价值。 让responseJSON =试试吗? JSONSerialization.jsonObject(with:data,options:[])as! [[String:Any]] 如果让responseJSON = responseJSON { print(“是的!我们刚刚包装了responseJSON!” } 上面的代码为responseJSON分配了一个可选值,并在调用的函数引发任何错误时将其设置为nil。 使用try? […]

大中央调度-Swift 3

Grand Central Dispatch或GCD是一种在我们的iOS应用程序中处理多任务的方法。 该系统的工作方式是可以将许多任务发送到调度队列,而调度队列又将在多个线程上运行,并最终由系统进行管理。 当我们尝试在其中一个应用程序中更新UI时,常常会想到GCD。 这些更新发生在主线程上,但是我们可能需要执行其他任务,并且这些任务可以在并发线程或后台线程上运行。 要添加一些上下文,队列是可以在主线程或后台线程中同步或异步运行的代码块。 使用队列时,我们可以使用Apple提供给我们的全局队列,也可以创建自己的自定义队列。 应该注意的是,全局队列应该谨慎使用,因为我们不想滥用它们。 为了更好地理解其中一些概念的含义,让我们直接进入代码并创建队列。 let queue = DispatchQueue(标签:“ queue.1”) 在这里,我们创建了一个自定义队列,并为其分配了唯一的标签。 您所说的标签完全是任意的,但最好为其命名与您的应用相关。 我们可以在这些队列上调用不同的方法,例如异步与同步。 这些关键字将告诉我们的应用程序如何执行我们的代码。 这是我们的代码在后台线程上同步运行而在主线程上运行的代码的示例。 //后台线程 queue.sync { 对于i in 0 .. <10 { 打印(“🔷”,i) } } //主线程 对于20中的i。<30 { 打印(“⚪️”,我) } 如果运行此代码,我们将看到如下所示: //打印:🔷0🔷1🔷2🔷3🔷4 … ⚪️20⚪️21⚪️22⚪️23⚪️24 … 我们的程序将在主线程上运行的for循环处停止,因为它是同步的,因此它可以在队列中执行我们的代码块。 如果我们将队列更改为异步,我们的应用程序将可以在主线程上自由运行代码,并且还将同时在队列中执行代码块,因此我们得到如下信息: //打印: 🔷0⚪️20🔷1⚪️21🔷2⚪️22🔷3⚪️23🔷4⚪️24🔷 … 尽管主线程是应用程序中的最高优先级,但是我们也可以指定队列的重要性,并让我们的应用程序知道如何确定任务的优先级。 该规范称为服务质量 (QOS)。 QOS是一个枚举,我们可以按从最高优先级到最低优先级的顺序将以下值分配给列出的队列。 .userInteractive .userInitiated 。默认 。效用 […]