Tag: swift

如何动态更改自定义应用程序图标

今天,我将讨论如何在iOS主屏幕上更改应用程序图标。 所以您可能会问我,此功能的用例是什么? 您可以为每个用户个性化应用程序图标,图标本身可以一目了然地提供有用的信息,具体取决于您如何自定义它。 对于我来说,实习项目的任务之一就是实现此功能,以便每个漫画的客户都可以选择在用户的主屏幕上显示其特定的漫画。 这不仅将为我们的客户提供价值,而且还将在我们的应用程序中提供价值,并允许用户选择其他应用程序图标。 顺便说一句,在这里免费下载该应用程序,以获取日常的网络漫画! “对于某些应用程序,自定义功能可以唤起个人联系并增强用户体验。”- Apple 我遇到了这个网站,在更改应用程序图标之前,我看到了此漂亮的通知要呈现给用户,因此我想重新创建它,以下是我的尝试: 我是怎么做的? 在MLB.com的“蝙蝠”应用程序上,对我来说,它像是一个弹出视图,下面有一层阴影。 因此,对于我的实现,我决定先在视图控制器上添加带有模糊效果的视觉效果视图 ,然后在现有视图控制器之上添加UIView 。 然后,我在视图控制器导航栏上添加了UIBarButtonItem ,并将按钮更新为在Icons8上找到的设置图标。 我没有将UIView直接放置在View Controller上,而是将其拖动到顶部作为View Controller的扩展,这样您可以更好地设计弹出视图,并且外观类似于以下内容(左:拖动UIView右上方:创建扩展名之后)

婚姻:可选? 可选的!

最近,我在Swift中学习了可选内容。 的种类。 我仍然不确定我是否正确,所以我将用简单的语言向您介绍可选内容。 这是一个关于名叫裁缝的女孩的故事,她真的想找到一个梦her以求的男人。 一天,她打开了火种,发现了4场新比赛:本,帕特里克,约翰和山姆。 让本:字符串 让帕特里克:弦! 让约翰:字符串? 让萨姆:字符串? 她还很年轻,喜欢神秘的事物,所以Ben对她来说太无聊了:她知道它们会约会一年,然后他会向她求婚。 帕特里克在个人资料中写道,他正在寻找妻子。 她认为他对她太直率了。 矛盾的女性心脏! 但是约翰和山姆的一切都不一样。 一个是花花公子,另一个是一个人。 她可能会得到一个建议,或者……什么都没有。 有点吓人但是有趣…… 约翰=“嫁给我,裁缝!” 要么 约翰=零 当然,她可以用力解开并假装一切正常。 结婚(约翰!) 但是在这种情况下,一个美丽的早晨,她可以发现约翰失踪了,她的心和生命将被打破。 裁缝想在某年(也许不是现在)几年内结婚。 她绝对不想成为一个大佬! 所以她决定和约翰约会。 漂亮的脸蛋,好地方。 但是如何更好地了解他,又不花她的青春去伤心? 裁缝决定用谷歌搜索它。 第一个建议是“问他是否要嫁给你” 。 因此,如果一个男人希望结婚,则可以毫无顾忌地开始与他约会。 如果john!= nil { 让happyLife =约翰! } 约翰大吃一惊,整个晚上都保持沉默。 他喃喃自语,他需要考虑这一点。 当然,他第二天不给她打电话。 再也不会。 有时候,直率并不是最好的朋友。 在此之后,Tailor感到失望和困惑。 但是那里留下了山姆。 幸运的是,她认识了山姆的最好的朋友汤姆。 所以她决定问他山姆是否有一天要嫁给她。 如果让汤姆=山姆! {让weddingProposal =汤姆} 当然,在这种情况下,汤姆也参与了他们的关系,这是不好的。 裁缝无意中伤害了汤姆,因为他喜欢汤姆,而他的自尊心受到了破坏。 该怎么办? 她很困惑,因此问汤姆一个模糊的问题,山姆是否考虑过婚姻。 如果sam?.length> […]

放下故事板

每年在WWDC上,Apple都会大张旗鼓和鼓掌地宣传Interface Builder的新功能,通常是在顶级会议中,例如大型的“国情咨文”会议。 如果您在Interface Builder中布置视图,则是个好消息。 同时,如果您在代码中布置视图,则新功能很少而且相差很远。 iOS 9中引入的关于在代码中创建自动布局约束的新语法的唯一提及是在15分钟内被塞进了名为“自动布局之谜,第二部分”的会话中! 不完全是黄金时间。 真遗憾的是,Apple没有提倡更多地在代码中布局视图,并且没有以与更新Interface Builder相同的速度来改进这样做的工具。 在代码中放置视图可以真正提高生产力,并且可以很好地提高代码的整体质量。 为什么不只使用Interface Builder? 有许多原因应避免使用Interface Builder,其中一些原因与编写代码的优势有关,而某些原因与Storyboards和Interface Builder的缺点有关。 我将在这里讨论一些关键问题。 除非我特别提到情节提要,否则下面将仅使用术语“ 界面生成器” ,因为大多数问题都与所有情况有关。 首先,Interface Builder文件只能由Xcode生成和读取。 您可以将文件读取为XML,但是它们没有什么意义,或者至少,XML本身对事物的实际布局没有多大帮助。 当您发生合并冲突时,这会带来问题,对于包含许多视图控制器信息的情节提要,合并冲突会变得非常严峻。 您可以无意中更改视图或视图控制器的布局,这可以通过单击错误或打开文件来实现。 Interface Builder通常只是因为打开文件而对文件进行了更改。 当查看差异时,很难将其与您自己的更改区分开来,也很难进行推理。 换句话说,更改可能很难(在提交之前由您自己审核,而在进行代码审核时则由团队伙伴审核)。 由于Xcode幕后发生的所有变化都会使臭虫迷失,因此臭虫可能会被发现而未被发现。 Interface Builder的一个基本问题是,您在界面中看到的大部分内容都是视图的设计时快照。 您可以修饰视图以使其看起来像实时运行。 例如,从文件或服务器获取并仅在运行时加载的任何数据都必须在设计时进行模拟,并在运行时由实际数据替换,或者完全不在设计之列,这会破坏视觉布局的意义。 。 这将模拟数据与您实际想要显示在应用程序中的设计时数据混合在一起。 换句话说,您必须拆除设计时布局并在运行时构建运行时布局。 仅在设计应用程序时供您查看的数据很容易泄漏并成为运行时数据,这是非常不幸的。 您在Interface Builder中设置的某些属性只是更好地在代码中设置。 为了您自己,或者为了任何人继承您的代码。 颜色和字体是要在代码中以一种或另一种方式定义为常量的事物的绝佳示例。 如果它们将来会发生变化,我不会羡慕那些必须通过所有观点来选择新颜色或新字体的人。 如果您确实在代码中定义它们,则当前无法在Interface Builder中引用它们。 无论您做什么,都会有很多挑选的颜色和字体。 如果在Interface Builder中只保留设计中的字体和颜色,而仅在代码中进行设置,那么这将违反Interface Builder的目的。 代码对Interface Builder中对象的引用通常由字符串标识符组成,在这些字符串标识符上没有编译时检查。 如果您更改,删除或错误拼写了任何这些字符串,则可能会导致应用程序在运行时崩溃或停滞。 如果您没有在发布前测试确切的代码路径,那么您会感到不满意。 当您使用Interface Builder时,Swift由于强大的键入和编译时间检查而带给我们的许多代码安全性会丢失。 […]

为隐式展开的可选项辩护!

我们都已经看到它们[Apple]做到了:通过附加一个! ,将@IBOutlet定义为隐式解包的可选内容! 他们的类型声明。 在True Swift开发人员中这难道不是一个大禁忌吗? 您会这​​样想,因为我们被告知,流浪感叹号通常是讨厌的运行时崩溃的不祥预兆。 您可能会争辩说,最好将出口声明为可选的弱属性,因为这完全避开了运行时异常情况。 合理的理由。 但是,我想挑战常识这一点,并接受使用!的想法! 在这里代替? 也可以接受。 快速语法复习 通常,插座形成了将用户界面元素(在情节提要或XIB中定义)连接到其程序对应对象的粘合剂。 如果您是避免使用情节提要的人,请使用以下快速语法复习: @IBOutlet var profileButton: UIButton? @IBOutlet标记没有任何副作用,可以根据需要将其省略。 就个人而言,我喜欢将它们放在那里,因为这样可以使他们以后更容易喊出来。 故事板将实例化按钮,并将其作为子视图添加到控制器的视图。 因此,只需保留较弱的参考即可,但不再建议使用。 该插座被标记为可选,因为不能保证在创建控制器时实例化该插座。 使用Optionals的成本 ? 既好又安全,但使用它们的代价是不可否认的。 为了便于阅读, if let或guard let ,则需要系统地对其进行包装。 当然,这会带来一些不便,但如果不自觉地加以掩饰, guard话语很容易出现在整个地方。 发现插座接线错误 可以肯定的是,乱扔垃圾的guard let瓦佐夫发表声明会让您也感到肮脏,但这是可以克服的。 但是,每次让我绊倒的是,如果您不正确地连接插座 (或者根本就忘了!) 会发生什么 。 使用可选的选项,每次都会像我一样挠头。 出口将保持为nil ,您的控制器将正确初始化,您将不知为何感到有些不对劲。 使用IUO !,您的应用将崩溃💥。 这种令人不舒服的副作用将立即提示,因为堆栈跟踪将准确反映出哪个属性正在起作用。 这样一来,您就可以迅速修复监督,而不会浪费时间。 虽然我不确定是否应该追溯转换现有的出口声明,但我开始使用! 前一阵子,仍然感觉很好。 如果发生开发人员错误,则“偏好”崩溃,而不是“可选”崩溃 我同意我们应该争取实现100%无崩溃率,但是对于明显的开发人员错误,我倾向于硬崩溃。 我发现选择性使用IUO及其导致的崩溃实际上可以提高开发人员的工作效率。 确实,我不是在试图逆势。 好位置! 在这种情况下,恰好是最快的“成功”途径。

在Swift中断言以及为什么要使用它们

断言:自信而有力地陈述事实或信念 您是否曾经编写代码并将其充满print(“Something happened here.”)胡说八道? 您知道,从理论上讲,它不应该被调用,但是在确实发生这种偶然性的情况下,您想知道吗? 现在,您在代码中散布了随机行,这些行并没有给您的应用程序带来任何实际好处。 什么时候发生—令人震惊—它确实发生了,但是调试器充满了垃圾邮件,您错过了它。 我第一次尝试在代码中使用asserts是在今年年初,当时我正在研究一些测试用例。 在我刚开始进行测试时,我开始发现到处都是这些assert(value != nil, “Error: …”)窍门。 我很快发现断言对于您的项目是非常有用的测试和调试工具。 但是他们怎么办? 断言要求给定条件为真,否则它将立即使应用程序崩溃。 但这不是很糟糕吗? 在生产中,是的! 通常,为了用户的利益,您通常希望避免崩溃,但是有时应用程序处于严重的状况,以至于无法继续进行危险。 如果您正在调试应用程序,那么崩溃可能非常有用,因为它可能直接导致您遇到问题。 当我从Web上的JSON文件中获取数据时,我可能不会总是收到期望的结果。 这可能是因为像打字错误一样简单,例如尝试访问data[“result s “]而不是data[“result”] 。 例如,如果我要查询小狗社交媒体API,则可能期望与特定的小狗匹配。 但是,如果那只幼犬的帐户由于过于可爱而被撤消怎么办? 这是一种现实情况,人们似乎并没有认真对待。 无论如何,如果我的代码依靠某个名为“ Belle”的小狗存在于数据库中,而她却没有,那么我的应用程序可能会以奇怪的方式响应。 让myPuppyInfo:[String:Any] = … 守卫让puppyData = myPuppyInfo [“ puppies”]为? [String:任何], 让Alice = puppyData [“ Alice”]表示为? [String:任何], 让Belle = puppyData [“ Belle”]为? [String:任何]其他{ assertionFailure(“解析JSON时出现问题”) 返回Result.failure(.unableToParse) } 在上面的示例中,我希望获得两只狗的数据:爱丽丝和百丽。 […]

使用Firebase Model Framework Salada制作用户模型

我将介绍我通常在应用程序中采用的用户模型。 本文将介绍什么 安装萨拉达 使用Firebase建立用户模型 链接Firebase身份验证和用户模型 $ gem install cocoapods —预 需要Cocoapods 1.4版或更高版本。 豆荚“萨拉达” 安装完成! 让我们快速建立一个用户模型。 甚至User.swift都可以,但是由于在使用Realm创建相同的用户模型时,我不喜欢名称冲突,因此我一直在使用Firebase + User.swift。 由于Firebase Auth也有一个定义为User的类,我认为最好提供一些名称空间。 这次,我将介绍简单的配置,但可能会很好地使用它。 导入 Firebase Firebase 扩展名 { 类 User :对象{ @objc 动态 变量名称:字符串? @objc 动态 var thumbnailImage:文件? 让关注者:关注者= [] 让朋友:朋友= [] } } 提供用户名和缩略图并关注功能。 借助File,您可以与FirebaseStorage无缝协作。 扩展名 Firebase .User { 静态 函数 当前 ( _ completeHandler:@escaping((Firebase.User?)-> Void)){ […]

带媒体附件的iOS丰富推送通知

与旧操作系统版本相比,iOS 10为我们带来了具有新功能的推送通知。 改进包括在通知中立即查看照片,视频或Gif。 通过使用新的Notification Service Extension ,可以将这些媒体附件作为通知的一部分。 您还可以使用新的Notification Content Extension来在通知的媒体附件视图中拥有更丰富的View Controller级别的内容。 我们将在下面浏览一些代码。 确保您具有: Xcode 8.0+ OS X El Capitan 10.11 将UserNotifications.framework导入到您的项目中。 苹果推送通知服务将您的应用程序的远程通知发送到每个用户的设备。 将向APNS服务器发送通知和设备令牌。 依次,他们处理该通知到正确的用户设备的路由。 届时,iOS将接管并确保将通知发送到您的应用程序。 推送通知的最大有效负载大小为4KB,它们支持开发和生产环境。 为了使您可以执行Notification Extension代码,必须对推送通知有效负载进行一些修改(例如,与iOS 9相比)。 { “aps”: { “alert”: { “body”: “Push notification body”, “title”: “Push notification title” }, “mutable-content”: 1, category: “rich-apns” }, “media-url”: ” https://i.imgur.com/t4WGJQx.jpg ” } ” } […]

测试unitario Swift

西班牙语测试,测试,测试,测试,测试和测试。 重新测试无法实现的错误和不正确的解决方法。 1.目标测试 XCode的中型企业和中型企业的标志性形式。 (图像中的蓝色天空) En el mismo navegador,en la barra de abajo pulsamos sobre elbotón+ y seleccionamos 新单元测试目标 2.分类测试 埃尔·纽埃目标瓦斯·哈瓦拉·克雷多·厄瓜多尔·厄瓜多尔·普罗维克托·科普诺· 阿卡巴多 是的,您可以通过测试,测试和修复项目, 构建设置或公交车来启用可测试性和功能。 测试的目的是通过测试进行测试。 Volvemos al archivo Tests.swift。 Viene predefinido con unas funciones de las cuales solo vamos a dejar por el momento dos。 Dentro de la clase de test al lado de la […]

无线跑步

苹果公司为客户提供的有线,有线和有线方式提供XCode 9许可证。 X Code 9违规行为: 要求: XCode 9或高级 Dispositivo conectado a la misma red que el mac Xcode Separual的Primero Hay que Tener El Dispositivo Conectado电缆。 埃斯托独奏曲。 Luego dentro de XCode pulsamos⇧⌘2是从 simulador y dispositivos发行的。 脉冲状的辣椒酱,通过红色涂成新的麦昆奎拉莫斯奶酪。 检查通过网络连接 。 最好的检查和确认您的电子邮件。 Una vez pulsado el check nosquedaráasí: 是的,您需要分配给您的报名是: ÿ 电缆和无线脉冲通过红色运行无线分布图。

Swift的演变

2014年,Apple宣布了一种新的编程语言– Swift。 它将Swift设计为一种面向对象的编程语言,它支持几种功能性编程语言概念。 该公司随后将Swift编程语言开源。 此外,它还定期更新现代编程语言,以加快针对iOS,macOS,watchOS和tvOS的应用程序的开发。 Swift的每个新版本都使开发人员能够使用简洁易读的代码来构建应用程序。 另外,最新版本的Swift提供的新语言功能可帮助程序员快速构建应用。 斯威夫特1 苹果在2014年发布了Swift 1.0。新的编程语言具有加速iOS和macOS应用程序开发的功能。 苹果公司将Swift推广为一种现代,安全,快速且交互式的编程语言。 尽管Swift被推荐为Objective-C的现代替代品,但是Swift与Objective-C完全兼容。 开发人员甚至可以选择在同一应用程序中使用Swift和Objective-C代码。 但是,与Objective-C不同,Swift使程序员无需编写其他代码即可编写iOS和OS X应用程序。 而且,编程语言比Objective-C快得多。 除了是一种面向对象的编程语言,Swift还支持许多功能性编程概念。 同时,Swift 1.0附带了一组新的语言功能,包括变量,常量,类型接口,泛型类,函数,闭包,元组和字典。 苹果进一步推出了完全重新设计的XCode版本,以加快Swift的开发。 XCode的更新版本提供的Playground功能使开发人员可以在实时环境中测试和呈现Swift代码。 迅捷2 苹果推出了Swift作为一种专有的编程语言。 但是后来它使编程语言开源。 在2015年,Apple宣布Swift 2为Swift 1的更新和开源版本。Swift2版本具有附加的安全功能,以确保错误处理过程的安全。 Swift 2中包含的新语言功能也使它成为面向协议的编程语言。 这些功能使开发人员可以将协议用作接口,扩展协议以及指定方法和属性。 同时,Swift 2还提供了几种新的语言功能,包括重命名的语法,迁移器和Objective-C泛型。 迅捷3 2016年,Apple发布了Swift编程语言的第3版,其中进行了重大代码更改。 与之前的版本不同,Swift 3需要程序员为所有函数参数添加标签。 通过从函数名称中删除不必要的单词,它还使开发人员能够使代码简洁。 命名类,结构,枚举或属性时,程序员必须使用LowerCamelCase而不是UpperCamelCase。 Swift 3通过引入C函数的新属性,使程序员更容易将C函数导入代码中。 苹果进一步修改了《 Swift API指南》,使开发人员更容易使用动词和名词来描述概念。 斯威夫特4 苹果计划在2017年秋季发布Swift4。但是该公司已经向开发人员发布了Swift 4的测试版。 Swift 4将随附XCode9。Apple进一步简化了从Swift 3到Swift 4的迁移过程。 开发人员可以使用XCode 9提供的迁移工具将其应用程序从Swift 3无缝迁移到Swift 4。 但是,Swift […]