Tag: Swift编程

快速登录/注销导航过程

创建Login和Tab Bar VC之后,我们需要将一个Storyboard ID分别添加为“ loginvc”和“ tabbarvc” 登录VC 不使用用户和密码文本字段,并且登录操作将状态设置为true并调用updateRootVC静态函数。 稍后我将解释updateRootVC函数。 个人资料VC 概要文件vc是执行注销操作的位置。 AppDelegate和切换器 最后,AppDelegate在启动时将调用切换程序updateRootVC函数。 Switcher updateRootVC函数是进行分支的地方。 AppDelegate和切换器 完成了! 任何改进/建议都是最欢迎的!

Swift 4中的多个ViewController(第1部分)

系列 Swift 4中的多个ViewController(第1部分) 如何在Swift 4 medium.com中使用Multiple ViewController Swift 4中的多个ViewController(第2部分) 如何在Swift 4 medium.com中使用Multiple ViewController 彭根纳兰 Dalam bahasa程序swift kita bisa membuat lebih dari satu view dengan satu view controller yang sama。 Akan tetapi akan lebih bagus jika massing-masing视图memiliki satu视图控制器。 Dengan demikian kita bisa lebih mudah dalam mengatur fungsi atau setiap property pada masing-masing view。 Khusus untuk入门教程ini Mungkin,Akan,Berguna,Agar,Lebih,Memudahkan,Dalam,Membuat,Aplikasi,Yang […]

使用UIFeedbackGenerator的触觉反馈和Taptic Engine改善iOS应用程序用户体验

在我的上一篇文章中,我写了关于在任何UIView中引入3D Touch作为通用UIGestureRecognizer来改善与您的应用程序的交互的信息,现在我想探索触觉反馈,这为我们提供了一种新的物理方式来控制用户所发生的事情在他的iPhone上。 在通过Taptic引擎提供触觉反馈之前,播放声音是向用户提供有关应用程序中动作的反馈的唯一方法,但是声音令人讨厌,有时令人毛骨悚然。 UIKit为此提供了一种简洁明了的方法:用于触觉反馈即插即用实现的标准安全接口UIFeedbackGenerator。 在特定的UIFeedbackGenerator中,是一个我们不能直接使用的抽象超类,我们必须在3个具体的子类中进行选择,每个子类都有特定的使用目的地。 UISelectionFeedbackGenerator 当用户通过一系列离散值更改选择时,例如在Apple通过诸如UIDatePicker之类的选择器移动Apple时,提供此反馈。 在实现自定义分段控件或更改任何选择时,可以在多个选择表视图和集合视图上使用它。 UIImpactFeedbackGenerator 该反馈旨在用于模拟Taptic引擎的物理影响。 UI元素固定到位或某些元素碰撞时,请使用它。 它具有3个强度级别,您必须将其作为初始参数传递:轻,中和重。 Apple建议根据UI元素大小选择强度。 我还在自定义3D触摸手势识别器(在GitHub和我的Medium帖子中)中使用它,以中等风格提供有关成功手势的反馈。 UINotificationFeedbackGenerator 这是最完整的反馈生成器。 您应该使用它来传达任务或动作的结果。 与ImpactFeedback相似,它接受一个参数,但是这次不是init方法,而是运行Feeedback时。 这次的样式与强度无关,而是指通知操作的结果:成功,警告或错误。 选择一个表示用户已结束操作的结果。 UIFeedbackGenerator非常容易集成到您的应用程序中。 自iOS 10起可用,除非您支持以前的iOS版本,否则不必检查可用性,否则: 如果 #available ( iOS 10,*){ // UIFeedbackGenerator代码块 } 或更快捷的方式: Guard #available ( iOS 10,*) else { 返回 } // UIFeedbackGenerator代码块 现在,您可以初始化从3个可用类中选择的具体类,并确保选择一个适合用户操作的类。 让feedbackGenerator = UISelectionFeedbackGenerator.init() //要么 让feedbackGenerator = UIImpactFeedbackGenerator(style:.medium) //要么 让feedbackGenerator = UINotificationFeedbackGenerator() […]

UIImage内存使用情况

儿子yazılarınbirkaçtanesinde UIImagekullandığımıfarkettim。 Bukullanımlarsebebiyle memory ilealakalıbasit veönemlibir konudan bahsetmekistedim.🔍 init?(named: String) 主捆绑包 içerisindebulunan herhangi bir resime ismi ileulaşmakiçinyukarıdaki 初始化 methodunukullanıyoruz。 Bu方法ileoluşturduğumuz她的nesne 缓存 leniyor。 布农faydalarıdavarzararlarıda。 Budurumlarıbirazdan inceliyelim。 init?(named: String, in: Bundle?, compatibleWith: UITraitCollection?) 捆绑 veboyutlardırmailealakalı参数alan 重载 edilen bu方法da 缓存 leniyor。 Amaşimdilikbu methodu da pasgeçipasılkonuyageçelim。 init?(contentsOfFile: String) 事务方法,参数olarak contents的文件路径,方法和文件缓存 lenmiyor。 Xcode Debug Navigator sekmesindeki Memoryalanı。 Gördüğünüzgibi 收藏品视图 içersindebulunan […]

适用于iOS App的简单MVP架构

如何使用iOS应用程序的单元测试创​​建简单的MVP架构 定义功能要求对于开发应用程序很重要。 它是描述用户与应用程序之间交互的用户故事列表。 用户故事可以使用以下模式编写: “作为,我可以 ”。 我将通过简单的场景向您展示iOS应用程序的Model View Presenter(MVP)架构的实现。 该应用程序是一个注册页面。 作为用户,我可以使用电子邮件,密码,全名和电话号码注册自己的身份。 以上功能要求的一句话看起来很简单。 但是实际用户可能会有各种各样的行为。 也许他没有写下电话号码。 用户输入的密码可能少于5个字符,而您的应用程序只允许输入8个字符以上的密码。 为了适应用户行为的所有组合,让我们进行测试。 用户通过填写​​所有字段进行注册。 期望 :注册成功 用户注册,但电子邮件字段未填写。 期望 :注册失败,并显示消息“电子邮件不能为空” 用户注册,但密码字段未填写。 期望 :注册失败,并显示消息“密码不能为空” 用户注册,但密码字段包含少于8个字符。 期望 :注册失败,并显示消息“最小密码长度为8个字符” 用户注册,但未填写全名字段。 期望 :注册失败,并显示消息“全名不能为空” 用户注册,但电话号码字段未填写。 期望 :注册失败,并显示消息“电话号码不能为空” MVP的基本概念。 使用mvp-arch的原因是使我们的代码库可测试。 根据干净架构的概念,我们应该在业务逻辑和视图逻辑之间建立严格的界限。 因此,我们可以分别测试业务逻辑部分和查看逻辑部分。 因此,如果我们在U​​IViewController上放置任何逻辑都是不好的。 视图是负责控制视图组件(如Button,UITextField,UITableView,UIImageView)状态的部分。 它由启用或禁用按钮的命令或显示或隐藏UIImageView的命令组成。 此外,还应负责管理UIViewController生命周期的状态。 另一部分是演示者,负责处理业务逻辑。 它可能包含一组显示或隐藏UIImageView的规则。 对我而言,模型是仅包含简单迅捷对象的部分。 负责保持某些相关对象的状态。 让我们通过在申请中显示注册页面来进行概念验证。 #1。 建立一个新项目。 我只是用一个页面创建一个简单的应用程序。 它包含四个UITextField和一个Button,将根据业务规则进行控制。 #2。 编写单元测试。 让我们从创建一个初始单元测试开始。 这源自我们之前讨论的测试方案。 […]

Swift — memoize()逐步

最近,我一直在阅读有关Swift 3未来的文章。 对在服务器上使用Swift以及在该方面完成的工作特别感兴趣。 迅捷轨迹🚀 Swift具有巨大的潜力,可以成为构建从VR到移动到服务器再到AI 的主流语言。 仍然缺少一些关键的构建块,但已经奠定了坚实的基础。 其中,可以说是最重要的功能支持 ,从第一天开始就随语言一起提供。 功能迅捷 语言结构很好地表达了功能支持,这使得一些疯狂的热门功能实现成为一个例子,其中一个示例就是在WWDC’14 Session 404 – Advanced Swift中引入的备忘录功能(讨论从00:38开始)。 在这篇文章中,我希望探讨memoize的性质并解释其工作原理,将其从WWDC’17的“高级”轨道移至“基本”轨道。 记住 乍一看, memoize’s实现看起来像Brainfuck启发的Hello World,但请放心-它是Swift。 纯功能性Swift😼 步骤2:递归记忆 为什么此版本的memoize是递归的要点是,将工作闭包作为参数传递给它自己 ,这使工作闭包可以对自身的memoize’d版本进行递归调用。 这有资格获得令人赞叹的史诗般的胜利🎆 14号线 使用尾随闭包语法,我传递了2参数工作闭包以进行memoize. memoize的结果(环绕式闭合)存储在名为factorial的参数中。 从工作闭包体内 对 factorial(x-1) 的调用 是指传递给闭包的参数,它与 let factorial 命名 完全无关 。 15号线 let factorial类型为(Int) -> Int 推断输入Int是因为发现Int Type符合以下要求: 1.符合Hashable协议。 2.支持== , *和—操作。 之所以推断Return Int是因为在返回之前没有执行任何类型转换。 1号线 memoize的递归支持版本还使用2个类型占位符: T, […]

处理应用程序生命周期

嗨,我的IOS开发人员。 在这里,我将向您展示当应用程序从前台转到后台时,如何遮罩View(应用程序的当前屏幕)。 当回到前台时,您将看到实际视图。 在印度,当Paytm应用从背景和前景过渡时,您可以在Paytm应用中看到这种生命周期处理。 在Project App委托类中,我获取了带图像的imageView。 然后,在application(didFinishLaunchOptions)中添加了观察者。 因此,每当应用转换时,就会调用这些观察者,依此类推 取决于那些选择器,imageview将被添加到窗口根viewcontroller的视图中,并将被从超级视图中删除。 4.最后,我从applicationWillTerminate()方法中删除了观察者。 相当容易! 对??? 如果您知道任何更好的方法,请让我知道如何处理这种功能。 谢谢!! 如果您喜欢我的教程,请在媒体上关注我。 您可以通过我的推特或linkedIn帐户与我联系。 谢谢阅读。 很快就会有更多教程变得更好。 再见!!!

斯威夫特-好

今天早上,我得到了“ Tuomas Artman” Talk的链接,他是Uber的架构和框架技术负责人。 在观看Talk时,我发现了一个有趣的话题,即“什么使’Swift’变得更好?” 是的,现在你们知道我在哪里找到Title了。 谢谢,Tuomas Artman and Talk非常有帮助,请不要错过观看… 斯威夫特与一百名工程师 Tuomas Artman分享了优步重写的优缺点这是Tuomas Artman的演讲,在… www.skilled.io上发表 这只是一种更好的语言。 让我们找出为什么更好的语言。 我找到了一堆关键字,让我们一个个开始,看看有什么特别的……

带角半径的UIView阴影

大家好, 感谢您将宝贵的时间花在我的教程故事上。 我将在2019年提出更多更好的方案。我希望您和所有人的成功。 一个自定义IBDesignable类,用于渲染阴影和角半径: 阴影始终需要附加或绑定到视图的边界。 更改拐角半径时,阴影也应正确应用于那些蒙版的拐角。 为此,我们在带有视图边界的Rect中创建一个shadowPath,并将设置视图层上所有必需的属性以及所需的拐角半径值。 例子:- 注意:要为视图蒙版特定的角,我们可以在视图的图层上使用maskedCorners属性传递所需的角以及图层上的角半径。 view.layer.maskedCorners = [.layerMinXMinYCorner,.layerMaxXMinYCorner] — — — — — — — — — — ************************** — — — — — — — — — 您可以在推特和链接上与我联系/关注我 帐户。 谢谢阅读… ****************************!!!再见!!!************** **************

[Swift 4]排名前三的String API新功能

在每个版本中,Apple都使我们越来越爱Swift。 但是,并非总是那样。 就我个人而言,Swift 3感觉是Swift的第一个正式版本,而不是版本1和2。他们感觉更像是该语言的beta发行版。 现在我们得到了Swift 4,它是Swift 3的升级,而不是像以前版本中那样对语言进行全面的改进。 它随新的Xcode 9一起提供。在使用Swift 4之后,我决定专门讲一个故事,重点放在令人兴奋的新String API上 。 关于Swift 4 Swift 4以Swift 3的优势为基础,提供了更高的鲁棒性和稳定性,提供了与Swift 3的源代码兼容性,对标准库进行了改进,并添加了诸如智能键路径和序列化之类的功能,同时缩短了构建时间并减小了尺寸应用程序二进制文件。 为您推荐: 我❤Swift [第1部分] — UIViewController和扩展 字符串API 字符串是Swift中最常用的类之一,因此最终,它得到了很多当之无愧的爱。 新的API包含许多更改,但我将仅关注最佳更改。 3个多行字符串文字会让您忘记在行中添加带有内联\ n的新行 较长的字符串,会使您的字符串显得肮脏且难以阅读。 这是多行字符串文字可能有帮助的众多示例之一。 通过将示例字符串添加到print()中,让我们比较当前和新的字符串多行方法。 迅捷3 print(“ \ n示例:\ n-第一行\ n-第二行\ n-第三行”) 斯威夫特4 print(“”“示例: – 第一行 – 第二行 -第三行“”“) 可能您会发现差异以及新的多行字符串的清洁程度。 为了使用多行字符串文字,您将需要使用“”“确定字符串的基本缩进。 2个集合–字符串再次成为集合。 它是在Swift 1中首先引入的,但在Swift 2中却被删除。现在,该字符串被视为字符的集合,我们可以对它们执行各种操作(迭代,过滤器等)。 直接在String上迭代 let str =“超赞的字符串” […]