Tag: Yayitserica

Swift 3中的倒数计时器

独立编程(阅读:在家)可能具有挑战性(阅读:由于Netflix),所以当我在Uber的《纽约女性密码》活动中听到Susan LoVaglio的闪电演讲中的Pomodoro技术时,我立即被卖掉了。 简而言之,Pomodoro技术是一种生产率方法,您可以在25分钟的间隔内完成一个目标,在此间隔5分钟。 对于像我这样管理博客,工作搜索和构建自己的应用程序的人来说,这似乎是实现自己的每个目标的好方法。 为了创建一个倒数计数器,我创建了一个Timer对象的实例。 在情节提要上,我创建了一个工具栏,并向其中添加了3个按钮按钮项:播放,暂停和重置。 在第20行上,您将看到一个布尔属性,用于标识计时器何时开启。 var timerIsOn = false 然后,我为每个工具栏按钮创建了IBActions函数:“重置”-> resetTapped,“暂停”-> pauseBtnTapped,“播放”-> playBnTapped。 对于我的playBtnTapped函数,请执行以下操作: 显示以前隐藏的进度条 如果计时器当前未打开,则创建一个timeInterval为1秒的Timer对象,其对象为“ self”(当前视图控制器),并调用我的方法timerRunning() 由于我现在已经创建了一个计时器,该计时器现在正在运行,因此我将timerIsOn的布尔值更改为true。 @IBAction func playBtnTapped(_ sender:Any){ // 1 progressView.isHidden =否 // 2 如果!timerIsOn { timer = Timer.scheduledTimer(timeInterval:1.0,target:self,选择器:#selector(timerRunning),userInfo:nil,重复:true) // 3 timerIsOn = true } } 单击播放按钮时将调用此timerRunning方法。 当我的倒数计时器变为0(零)时,此方法负责填充进度栏。 func timerRunning(){ timeRemaining-= 1 让completePercentage = Int((((Float(totalTime)-Float(timeRemaining))/ Float(totalTime))* 100) progressView.setProgress(Float(timeRemaining)/ Float(totalTime),动画:false) […]

创建集合视图(Swift 3)

在此博客中,我将讨论如何实现简单的集合视图。 这简单! 集合视图是有序的布局显示,与表格视图相比,可以进行更多的自定义。 如果要以类似网格的方式显示多个图像,我希望在表视图上使用集合视图。 如果我只想显示一个简单的列表,则可以使用表格视图。 对于此博客,我将从iTunes RSS feed生成器中检索数据。 该应用程序将在iTunes中显示美国排名前10的有声读物。 步骤1:添加收藏夹视图 在Main.storyboard中 ,将集合视图拖到视图控制器上。 添加约束以使其与父视图的边缘对齐。 添加约束以使其与父视图的边缘对齐。 步骤2:将View Controller分配为Collection View的数据源。 请注意,我没有将View Controller分配为Collection View的委托,因为我只是在显示Collection View单元,并且不希望用户具有可突出显示与所显示的单元进行交互的任何功能。 步骤3:在ViewController.swift中 ,遵循UICollectionViewDataSource协议。 步骤4:在我们的ViewController.swift文件中创建一个集合视图的实例。 步骤5:创建一个CollectionViewCell.swift文件。 此CollectionViewCell.swift文件将具有用于UIImageView(用于书本图像)和UILabel(用于我们的书本标签)的出口。 在此类中,我们还将具有处理显示单元格内容的功能。 步骤6:在Main.storyboard中 ,选择集合视图单元,并将其类设置为“ CollectionViewCell”,然后将其设置为redirectIdentifier。 选中集合视图单元格后,在“ 属性”检查器中 ,将重用标识符标记为“ collectionViewCell”。 步骤7:将UIImageView和UILabel拖到集合视图单元格上。 根据需要约束它们。 步骤8:将UIImageView和UILabel连接到CollectionViewCell.swift文件中的相应属性。 步骤9:为有声读物创建数据模型。 创建一个名为Audiobook.swift的新文件,并标识此数据模型的属性。 请注意,我在“ coverImage”属性中将图像URL作为字符串输入。 Audiobook初始化程序将为每个Audiobook对象解析一个字典 。 步骤10:编写APIClient实现。 步骤11 :(可选)创建DataStore管理器类(单例)以处理根据返回的API JSON数据创建Audiobook对象的过程。 如下所述,我导入UIKit(因为我将书图像作为UIImages存储在此文件中)。 您可以看到我有一个有声读物数组和一个UIImage数组来存储这些要在集合视图中显示的对象。 这不是我最喜欢的组织对象的方式,但现在可以了。 您还将注意到,我有两个功能: getBooks(completion 🙂和getBookImages(completion 🙂 。 […]

如何将字体导入Xcode(Swift 3)

因此,您正在构建自己的第一个应用程序……让我们用一些很酷的字体来增强UI效果! 这是6个步骤的操作方法。 第1步: 找到一个漂亮的字体并下载。 我使用DaFont作为我的个人徽标,并为该项目/博客文章找到了另一个漂亮的字体Ember。 我之所以选择Ember,是因为它在公共领域,但是您可以轻松地选择一种不错的字体,然后向其设计师发送一份体贴的捐款。 (我也非常喜欢Boquerón,但也许我会将其保存到另一个应用程序项目中)。 确保字体为TFF(TrueType格式)或OTF(OpenType格式)。 第2步:保存字体并将其拖到Xcode项目中。 将字体文件夹拖到项目中时,请确保“根据需要复制项目”。 第3步:单击您的字体文件夹,以确保它们包含在“目标成员身份”中。 步骤4:快速检查一下,您的字体在“构建阶段”->“捆绑资源”中吗? 步骤5:在plist中手动输入字体名称。 第6步:使用字体! 使用情节提要 ,在下拉菜单中找到字体。 以编程方式,在标签或文本项上选择font属性。 在下面,我将按钮的字体更改为“ Ember”字体。 给我留言,让我知道您决定将哪些酷字体导入应用程序! 资源: DaFont.com 1001字体 字体松鼠

在Swift 3中创建音乐播放器应用

在此博客中,我将逐步创建一个音乐播放器应用程序,以播放我最喜欢的歌曲之一:Purple Rain☔️。 在此应用程序中,我们将使用AVFoundation,这是一个Apple框架,可让我们记录/播放/编辑照片,视频和音频。 步骤1:建立使用者介面 对于我的UI,在Storyboard中 ,我拖动了一个带有三个按钮的工具栏 。 在Attributes Inspector中 ,我使用PLAY按钮,PAUSE按钮将按钮更改为Systems Items ,并在最后一个按钮上键入“ Restart”。 我还确保在三个按钮之间分别拖动了弹性空格键按钮项 。 步骤2:为这些按钮创建IBAction。 按住Control键,将故事板中的3个按钮分别拖到ViewController文件中。 确保每个连接都是一个动作 ,而不是一个插座 。 步骤3:选择歌曲! 我已经从iTunes下载了《 Purple Rain》这首歌,因此将其从iTunes拖到“项目导航器”窗格中(位于Main.storyboard下方 )文件中。 如果需要,复制项目。 当它出现在“导航器”窗格中时,我将其重命名为简单的名称,例如PurpleRain。 文件类型为.m4a 。 请勿将其更改为mp3。 当我尝试将其更改为mp3时,发生了坏事。 步骤4和5:导入AVFoundation并创建一个AVAudioPlayer。 就像我之前提到的,AVFoundation是Apple的框架,允许您播放/编辑/创建视频/照片/音频。 从Apple文档中: AV Foundation框架提供了一个Objective-C界面,用于在iOS和macOS应用程序中管理和播放视听媒体。 我们在顶部导入此框架,并创建一个AVAudioPlayer类的实例,该类正是这样做的,它播放文件中的音频。 第6步:编写一个函数来设置我们的歌曲和会话。 从Apple文档中: 音频会话用于与系统交流您打算如何在应用程序中使用音频。 音频会话充当您的应用程序与操作系统之间的中介,进而充当基础音频硬件之间的中介。 我编写了一个函数prepareSongAndSession()来处理此功能: 步骤7–13:设置我们的AVAudioPlayer和AVAudioSession。 由于我是从iTunes手动将Purple Rain歌曲拖到项目中的,所以现在它已成为项目Bundle的一部分。 #7 —我将歌曲(来自捆绑包)插入我的AVAudioPlayer中 。 我用“!”来敲它,因为我确定这首歌存在于项目中。 此操作将引发错误,因此将执行do / try / catch块。 转到“ […]

带断点的Xcode调试(适用于初学者)

作为终身学习者,可以理解,犯错误是学习过程的一部分。 在编程中,这些讨厌的事情被称为🐞(错误)。 成为一名彻底而高效的调试器将使我成为一名更好的程序员,并最终使我能够长期编写出色的代码。 我认为最好对Xcode内的初学者级调试以及如何熟悉Breakpoint调试工具及其某些功能进行一些研究。 那么,什么是断点? 断点是一种调试工具,它使您可以暂停程序的执行直到某个时刻。 为什么要使用断点? 在代码中创建“暂停”点可以帮助您调查代码以查看错误发生的位置。 如何创建断点? 简单。 确定要在哪里暂停代码执行,然后单击左侧装订线以创建蓝色断点。 让我们看一下我们称为“调试区域”的出色之处。 上面的屏幕截图中发生了什么? 我创建了一个函数findSumOfEvens (),如果两个都是偶数,则它们将两个整数相加。 我在第24行调用了findSumOfEvens (n1:2,n2:4)函数后,在第25行设置了一个断点。该函数在第25行暂停,这意味着第二次调用findSumOfEvens (n1:1,n2: 6)未被称为YET。 我还注释了一些有用的Xcode调试按钮/区域 。 注意: 继续/暂停=(键盘快捷键是⌃ +⌘+ Y) 这些执行控制按钮: 跳过=(键盘快捷键是F6) 进入=(键盘快捷键是F7) 跳出=(键盘快捷键是F8) 我运行了该项目,控制台显示“您的偶数之和为6”。 接下来,我单击“ Step Over”按钮以执行下一行代码(第25行),这是我放置断点的位置。 在上方,您可以看到我“跳过”了实际上已执行IT的下一行代码,现在我的控制台已打印“您的两个数字都必须是偶数。 再试一次。” 我如何摆脱断点? 右键单击断点以删除: 等待,您的控制台中的(lldb)消息是关于什么的? LLDB代表“低级调试器”,它提供了用于iOS应用程序开发的基础调试环境。 它可用于查找和消除Swift和Objective-C代码中的问题。 断点和LLDB有何关系? 您可以在LLDB中键入快捷方式命令,以帮助您在代码的某些行设置断点,在代码中的许多点设置断点,列出所有断点并禁用断点。 在上面,您可以看到可以通过在LLDB中输入“选择器”(方法名称)来设置多个断点。 如果您有许多文件,并且不想单击所有文件来设置断点,这将特别有用。 在上方,您还可以“列出”项目中的所有断点。 在上方,您可以看到打印到控制台的详细列表信息,其中包括“命中计数” ,它表示我们达到某个断点的次数。 上面,我使用“ disable”禁用所有断点。 如果我只想禁用第二个断点 ,则应该输入“ breakpoint disable 2”。 上面,我在代码的特定位置设置了一个断点:第16行的ViewController.swift文件。 […]

递归迭代:Collat​​z猜想(快速4)

本周,我被要求研究Collat​​z猜想,并编写一个函数,该函数确定达到给定输入达到1所需的步骤。Collat​​z猜想以20世纪初德国数学家Lothar Collat​​z命名。 猜想背后的主要思想是,对于任何给定的数字n (即12),如果给定的数字是偶数,则您将是该数字的一半。 如果是偶数,则继续将结果数减半。 如果不是(意味着,如果数字为奇数),则将奇数乘以3并加1。继续应用这两个运算( n * 2或3 n +1),直到n = 1。 为了显示: 如果是偶数,我将被2除。如果是奇数,我将被3乘以加1。我继续这样做直到得到数字1。 上面,我编号了到达1的步骤。它花费了9个步骤。 在下面,我将研究如何计算代码的步数(当然是Swift!)。 注意:有时我会像“ Colletz”那样拼写“ Collat​​z”,对不起! 当n = 12时,无需递归即可运行此功能花费了0.009045888秒。 当n = 12时,使用递归运行此函数在其上次迭代中花费了0.000402969秒。 请注意,在第一次调用中,它花费了0.008834584秒,这比我编写的没有递归的第一个函数要少。 我希望您喜欢使用DispatchTime,并将带有for循环的函数重构为具有递归的函数,从而对Collat​​z猜想有更多的了解。 请在下面享受一点Gosling / Culkin递归。 资源: DispatchTime –调度| Apple开发人员文档 创建相对于系统时钟的时间,该时间自引导以来开始计时。 developer.apple.com

承诺:一种使异步网络代码“ NSYNC”的方法

有了一个承诺,我就不需要在完成闭包中处理字典的解析,我可以将该动作链接到“获取JSON数据”动作。 见下文: 在上面的代码要点中,在第1行上,您可以看到我的getArticles()方法返回了Promise 。 此功能“有前途”的意思是,在我收到文章后,我将返回文章的承诺。 我将通过返回文章(也就是我在第13行的结果 )来实现这一承诺。 为了实现这些承诺,我使用了一个名为PromiseKit的第三方库。 我将向您介绍如何将PromiseKit集成到我的应用程序中。 首先 -为您的项目创建/打开一个Podfile。 在Terminal中,我使用Sublime(因此称为subl Podfile)打开了Podfile。 确保您位于项目文件的当前目录(文件夹)中。 第二个 -在您的Podfile中,在下面添加第10行。 保存并关闭此Podfile。 第三 —在终端中,键入“ pod install”。此说明将PromiseKit库安装到您的项目中。 第四 -在终端中,打开.xcworkspace (而不是.xcodeproj)! 第五步–在要编写网络代码的文件中,在顶部导入PromiseKit。 按⌘+ B,这会将PromiseKit库构建到您的项目中。 第六 -开始编写代码! 在这个应用程序示例中,我有一个Article模型(上文),它将从NYTimes API获取数据以创建Article对象。 我已经在上面的屏幕截图中注释了我的代码,但是我将在这里再次概述它: A —我没有使用完成闭包,而是让我的网络函数返回了类型为Promise的Promise。 B — Promise块需要实现和拒绝方法。 C-这个URL是我用来获取任何Cuba文章的NYTimes API数据的URL。 古巴是我去过的最有趣的国家。 (旁问:您访问过的最有趣的国家/地区是什么?) D-解开网址后,创建一个URLRequest E-创建一个URLSession F —创建一个URLDataPromise(PromiseKit随附)。 它返回一个专门的Promise包装URLSession.dataTask(with :)。 重要的是要注意,这是我们要做的第一个动作,第一个承诺。 我们正在写一个从dataPromise获取数据的承诺。 G —在我的dataPromise上,我做第二个PROMISE。 我们承诺将数据(从我们的第一个承诺开始)转换为反序列化字典。 您会注意到.then语法。 读起来很不错,就像您说的那样:“如果出现此内容,那么我会做些处理。” H-现在第二个承诺已经实现(我有一个字典),我可以使用该字典创建我的Article对象之一。 […]