Tag: swift3

flatMap方法的实际应用— Swift 3

这一次,我们将讨论flatMap方法。 但是首先让我们考虑一下上下文。 假设我们有一个数组数组: var arrayOfArrays = [ [1, 1], [2, 2], [3, 3] ] 将其内容乘以2是一个挑战,其结果应如下所示: // [[2,2],[4,4],[6,6]] 解决此难题的一种方法可能是两次使用map Array的方法,如下所示: //首先迭代数组的数组 arrayOfArrays。 映射 {数组在 //和第二次迭代 //当前数组 返回数组。 映射 {中的整数 //将其内容乘以2 返回整数* 2 } } // [[2,2],[4,4],[6,6]] 好的,接下来是一个新的挑战,将乘法数组转换为仅一个数组,如下所示: // [2,2,4,4,6,6] 幸运的是Array的结构为此目的有一个称为joined ,让我们使用它: var multipliedByTwo = arrayOfArrays。 映射 {数组在 返回数组。 映射 {中的整数 返回整数* 2 } } var flattened […]

CoreData和Swift 3

最近,我一直在研究一个简单的任务管理器应用程序。 我决定快点编写它,因为我不想使用任何Pod,所以我从心爱的Realm切换到了CoreData,这就是我们旅程的起点。 CoreData与Swift 3一起对我来说还很陌生,因此我想阅读文档,但仍在Swift 2.2中。 那里没有问题,StackOverflow肯定会救我! 好吧,事实并非如此简单。 我花了几个小时才能找到所有资源并使其正常工作。 因此,我现在正在编写本教程,以便您可以在一个地方找到我发现的遍布互联网的内容。 将CoreData添加到您的Xcode项目 答:简单的解决方案是在创建Xcode项目时仅选择CoreData。 Xcode将为您的AppDelegate文件添加所有必需的代码,还将为您创建.xcdatamodeld文件。 从这里跳到项目符号点2。 B.将CoreData添加到现有项目 这不是那么简单,但仍然很容易做到。 第一件事是打开您的AppDelegate文件,并在顶部导入CoreData 。 下一步是添加CoreData方法,如下所示: // MARK:-核心数据栈 懒惰的varpersistentContainer:NSPersistentContainer = { / * 应用程序的持久性容器。 这个实现 创建并返回一个容器,并已为 应用到它。 该属性是可选的,因为有合法的 可能导致存储创建失败的错误条件。 * / let container = NSPersistentContainer(name:“ tets”) container.loadPersistentStores(completionHandler:{(storeDescription,error)在 如果让error = error as NSError? { //用代码替换此实现,以正确处理错误。 // fatalError()使应用程序生成崩溃日志并终止。 尽管此功能在开发过程中可能很有用,但您不应在运输应用程序中使用此功能。 / * 出现错误的典型原因包括: *父目录不存在,无法创建或不允许写入。 *由于设备锁定时的权限或数据保护,无法访问持久性存储。 *设备空间不足。 […]

Swift 3中的闭包是什么? (第3部分)

继续第1部分,第2部分,这篇文章将是有关Closures的最后一篇,我们都可以肯定,它可以写成一整本书,只讨论Closures,所以我几乎没有触及任何表面。 这次我要谈的是: 速记参数名称 尾随闭包 速记参数名称 迭代数组的一种方法是使用forEach方法,在以下示例中,该方法将打印其内容: 闭包具有使我们简化代码的功能,而不必通过参数访问其值,而可以使用简写参数名称来访问它们: 您可能会注意到,我们省略了参数名称number甚至省略了关键字in ,并且我们正在通过名称$0访问闭包提供的值,以便减少代码并专注于代码中最重要的部分。 因此,即使闭包有更多的参数,速记名称也将被分配为$0 , $1 , $2 ,以此类推。 尾随闭包 假设我们有一个名为findInteger的函数(不用担心该函数的源代码在结尾),它将使用Integer数组根据条件搜索元素: 因此,在上面的代码中,我们希望获得第一个满足关闭条件的数字,即数字服务器。 我们可以看到我们在第二个参数上收到一个闭包表达式,但是有时像在这种情况下那样,表达式变长了,相反,我们可以这样做: 区别在于,首先我们不需要在函数调用中使用参数标签closure 。 其次,闭包表达式位于函数调用的括号之后,但它仍然是函数的参数。 这种简化方式称为尾随闭合。 让我们来看另一个例子。 这次,我们在Integer的扩展结构中使用了一种称为forEach (末尾的源代码)的方法,该方法将允许我们迭代数字上的数字,如下所示: 该代码本身具有解释性,但是关闭时间较长。 让我们应用一些尾随闭包 。 因此,在这里作为最后一个示例( findInteger function ),我们没有放置称为closure的参数标签,也没有包含括号。 如果闭包表达式是forEach方法中唯一的参数,那么我们也可以消除函数的调用括号。 当闭包表达式很长时, 尾随的闭包可以解脱 。 正如我提到的,示例中使用的方法的源代码: 如果您觉得该文章有用,请帮助我建议单击绿色的心形轮廓图标,以便我可以继续创建更多文章,非常感谢! 我要亲自感谢Bob和Victor激励我与我们的iOS社区分享我的Swift故事。 感谢您阅读我!

iOSDCで発表してきました「Swiftのこれまでの动向のまとめと逐渐のさらなる発展の期待」

iOSDCにて,発表しました🎉 iOSDCのスタッフの方に,良い写真をたくさん取っていただけました😋 iOSDC日本2016 iOSDC日本2016の公式フォトアルバムです www.flickr.com

SWIFT 3中的UICOLLECTIONVIEW,没有界面构建器。

集合视图类似于表视图,它们显示由自定义布局定义的单元格的集合,并且像表视图一样,它们必须符合协议才能显示数据和执行操作。 在本教程中,我们将创建一个看起来像网格的集合视图。 好吧,让我们潜入…… 让我们开始创建一个新项目,这次选择Swift。 现在,让我开始向您介绍将处理collectionView布局的类UICollectionViewFlowLayout。 创建一个新的Cocoa Touch文件并使其成为UICollectionViewFlowLayout的子类,添加此完整的实现,我将对其进行解释…… let innerSpace: CGFloat = 1.0 let numberOfCellsOnRow: CGFloat = 3 override init() { super.init() self.minimumLineSpacing = innerSpace self.minimumInteritemSpacing = innerSpace self.scrollDirection = .vertical } required init?(coder aDecoder: NSCoder) { //fatalError(“init(coder:) has not been implemented”) super.init(coder: aDecoder) } func itemWidth() -> CGFloat { return (collectionView!.frame.size.width/self.numberOfCellsOnRow)-self.innerSpace } override var itemSize: […]

Firebase身份验证

您好iOS工程师, 这是学习Firebase身份验证的好日子。 在我的第一篇文章中,我简要说明了身份验证及其在应用程序中的作用。 今天,我们将找到有关身份验证以及如何在应用程序中使用身份验证的更多信息。 什么是认证? 身份验证是授予用户访问操作系统的过程。 为了进行访问,用户输入其凭据,然后应用程序将该信息与数据库数据进行比较。 如果用户在数据库中,则他们可以使用该应用程序;否则,他们将被拒绝访问。 我们现在使用大量的应用程序,大多数(如果不是全部的话)都具有身份验证过程。 我希望您尝试一下,看看有多少应用程序要求输入用户名和密码。 该过程就是身份验证。 我们为什么要关心身份验证? 我们应该关心身份验证,因为它使我们作为开发人员和客户受益。 让我们考虑一下客户如何使用身份验证方法。 1.用户为应用程序提供新的用户名和密码。 2.该应用程序仅在数据库中为该用户创建了一个唯一的配置文件。 3.用户只能访问其数据。 这只是用户如何使用身份验证的基本概述。 大多数情况下,每个应用程序都像上面的列表一样工作。 用户可能会以不同的方式与某些应用进行交互,但这只是基本概述。 对于我们的开发人员来说,身份验证也是有益的。 让我们考虑一下为什么要使用身份验证。 1.身份验证有助于提高安全性,因为用户可以将数据保存到他们只能访问的数据库中。 2.当用户登录到应用程序时,我们将为该用户创建一个结构化的数据库。 3.因为我们可以将用户与数据相关联,所以管理应用程序的所有数据更加容易。 例如,假设我们有一个应用程序将图片存储在数据库中。 如果没有身份验证方法,我们将不知道哪个用户提供了上传图片。 拥有这些信息很重要,因为如果用户想查看他们上传的图片,我们将不知道,因为数据没有连接到任何用户。 通过身份验证,我们可以在该数据库中为该人创建一个唯一的ID。 用户每次上传任何图片时,都会将上传内容与该人的唯一ID相关联。 Firebase身份验证 我们了解身份验证的基础知识,因此现在我们可以讨论Firebase身份验证。 使用Firebase,我们不必从头开始创建我们自己的身份验证库。 我们可以使用Firebase形成的基础架构为我们的用户带来出色的用户体验。 我们可以在Firebase中使用三种身份验证方法。 三种方法是电子邮件和密码,服务和匿名。 1.电子邮件和密码是我们几乎每天使用的每个应用程序中看到的内容。 在使用大多数应用之前,要求您提供用户名和密码。 2.服务已经存在了一段时间。 您正在使用的应用程序将询问您是否要使用Facebook,Google,Twitter等进行登录。服务允许用户选择是否要使用其设备上已在使用的服务登录。 它使建立帐户的过程变得快速而直接。 3.匿名身份验证为用户提供了一个临时帐户。 如果用户稍后注册,他们仍然可以访问其数据。 哪些应用程序应具有身份验证? 我相信所有应用都将受益于身份验证。 就像我之前说过的,这是组织数据的绝佳方法。 您不想做的一件事就是无法保存您的数据。 身份验证是应用程序为用户创建初始数据的起点。 除非您有另一种获取数据身份验证的方法,否则它将是完成这项工作的最佳解决方案。 为iOS设置身份验证难吗? 使用Firebase并不难配置身份验证。 首先,您必须设置环境以将Firebase集成到您的应用程序中。 我确实创建了一个教程,向您展示如何在应用程序上设置Firebase。 您可以在此处找到视频。 在接下来的几天里,我还将创建一个有关如何在您的应用程序中设置身份验证的教程。 […]

雨燕3:私有和文件私有解释

苹果已经发布了swift 3,许多开发人员都在做噩梦,因为在进行必要的更改之前,较早的代码将拒绝在Xcode8中进行构建。 这可能意味着很多晚上无法入睡,几天中有些晚工作时间,尽管其中有许多人完全放松下来。 我将在即将到来的帖子中写有关快速更新的内容,为此,我正在讨论一个较小的部分。 Swift 3带来了许多重大变化,其中之一是引入了新的Access Modifier: Fileprivate 。 Fileprivate现在是早期Swift版本中的private。 您可以很好地从名称本身猜测,在班级级别是私有的。 无论使用什么功能,使用Fileprivate定义的变量都只能在所有范围内的该类中访问。 其中as,private修饰符比Fileprivate更具限制性。 所有带有private的声明只能在词法范围(声明的地方)内访问。 例如,如果您使用Fileprivate修饰符声明了一个类变量,则可以在该源文件中的所有扩展名中使用,在private中使用private会产生错误,因为它是在类范围中声明的,而现在已在中使用。 我将使用表格视图示例进行演示。 步骤1 :创建一个新的视图控制器文件,以及两个类级别的ivars,它们都是String数组,一个带有private修饰符,另一个带有FilePrivate。 步骤2 :对该类进行扩展,使其符合UITableViewDataSource协议,并实现两个tableview数据源函数numberOfRowsInSection()和cellForRowAtIndexPath()。 步骤3 :在numberOfRowsInSection()中,首先返回fileprivate数组计数。 一切都会好起来,代码将成功编译。 现在尝试返回私有数组计数,您甚至不会在代码意义上自动完成该变量。 即使您手动编写,编译器也会给出错误。 由于因为您在类作用域中声明了私有变量,所以您不能在扩展中使用它,因为它们是不同的作用域。 根据经验,专用于变量,常量,内部结构和仅在类/结构的声明内使用的类。 如果要在整个文件中访问变量,请使用Fileprivate。 这都是第一个故事,其他新的更新博客即将推出。

如何在具有不同故事板的ViewController之间进行选择

当您想在情节提要之间划分视图时,此功能将很有用,例如,当您在团队中工作时,您的同事可能正在一个特定的情节提要上工作,而您在另一个情节提要中工作而不会合并大问题! 让我们使用Single View Application模板在xcode中创建一个新项目: 为了在视图控制器之间进行隔离 ,我们将需要一个导航控制器 ,所以让我们开始吧,从xcode的导航器端转到Main.storyboard文件,然后从画布中选择ViewController ,然后在顶部栏菜单中选择编辑器/嵌入/导航控制器,如下所示: 然后转到“ 对象库”部分,选择“ 情节提要参考控件”并将其拖动到画布上: 让我们创建另一个 情节提要板,然后转到顶部栏菜单,选择File / New / File 选择“情节提要”选项,单击“下一步”,然后为其命名为“ 另一个”: 现在,从导航部分中选择Another.storyboard ,并在画布中从Object Library部分中拖动一个新的ViewController : 让我们继续在Another.storyboard上工作,我们需要为画布中的ViewController为其Storyboard Id Identity提供一个值,我们可以随便命名它,让我们使用此值命名: AnotherViewController 到目前为止,到目前为止还不错,现在让我们回到Main.storyboard文件,然后在画布中选择ViewController并从ViewController中的Object库中拖动一个Button控件: 然后按下控制键并单击鼠标左键将鼠标悬停而不释放,然后将其释放到我们之前在画布中创建的情节提要参考控件中,这样将出现一个弹出窗口,选择“ 显示”选项: 最后,我们在Main.storyboard中需要做的最后一件事是配置Storyboard Reference,一旦单击它,右侧的检查器面板将为我们提供一些选项,例如Storyboard ,该选项设置为Another值即另一个的名称。我们使用AnotherViewController值设置的故事板文件和参考ID 表示故事板ID,我们将其提供给位于another.storyboard文件中的另一个ViewController 现在运行它,即使知道两个控制器都位于不同的故事板文件中,也可以在视图控制器之间进行导航。

使用Swift3 iOS应用程序实现自定义相机功能

要在iOS中实现相机功能,我们使用Image Picker Controller,但如果需要更改Image Picker Controller以外的样式和功能,则需要创建自定义相机。 因此,在本教程中,我们将看到一个示例,该示例在iOS中使用Swift 3创建自定义相机。 让我们看看如何: 首先,我们将根据我们的需要或要求创建用户界面,并在控制器中包含3个元素:- UIView 影像检视 UIButton UIView用于向用户显示相机,UIImageView用于将单击的图像显示为预览,最后但并非最不重要的UIButton用于拍照并显示在UIImageView中。 屏幕的用户界面截图如下: 现在,我们将转向自定义相机功能的编码部分。 创建两个元素UIView的出口作为PreviewView,用于显示摄像机,另一个是ImageView作为captureImage,以显示捕获的摄像机的预览。 UIButton用于按钮动作,因此我们将不创建UIButton的插座,而将创建名为btnTakePhoto的UIButton动作。 在此处阅读更多有关如何使用Swift3 iOS App实现自定义相机功能的信息

如何在Xcode 8.2.1中自定义文件模板

你好! 这是在Xcode中使用的Xcode文件模板,可以让您轻松使用并快速使用TableviewController,Collectionview Controller,……等模板创建新文件。 来源:https://github.com/sourleangchhean168/Xcode-Custom-Template 如何使用 转到您的Xcode的路径: Xcode 8.2.1.app/Contents/Developer/Library/Xcode/Templates/File Templates / Source 2.将所有文件夹(“ .xctemplate”)复制到上述路径 3.重新启动您的xcode(可选) 警告 您尝试使用此存储库后,我们对您的问题不承担任何责任。 只是为了学习谢谢 联系我们 电子邮件:sourleangchhean168@gmail.com Stackoverflow:酸辣豆蔻