Tag: Swift编程

第一天-倒数计时器应用程式

我的眼睛从我的头上掉下来,所以明天我要把这只小狗写出来,但是我们从第一天开始,我们有点像应用程序了! 自动版面 直到现在,我还没有想到您在Sketch中看到的自动版式并不是他们的主意。 而是基于Xcode本身内置的工具。 它超级直观,非常适合确保您的视图适合多种设备。 每日反思播客 锚点-开始播客的最简单方法 启动播客的最简单方法。 100%免费创建,分发和托管您的播客。 锚 时间跟踪 为了弄清楚获得半水平的应用程序开发所需的时间,我将跟踪自己的时间并记录所涉及的小时数。 请记住,我有3个5岁以下的孩子,所以这是一个充满激情的项目,发生在晚上的沙发上,而不是Netflix。 为了使它更有趣,我将在成本和代理费率两方面都加一个时间值。 费用:60澳元 中介费:$ 150 AUD

Swift 4 —动画NSLayoutConstraints:简单菜单

Swift 4(iOS)中的动画,我们可以使用多种方法来制作UI元素或过渡的动画。 我们可以使用Transform方法,CGRect,CGPoint甚至约束。 可以将动画代码添加到动画代码内部,该代码通常为UIView.animate(_ :)或UIView.animateKeyframes(_ :)。 由开发人员选择。 视频教程已添加到此处-SwiftDynamics YouTube频道。 在这里,我将向您展示如何使用UI元素的NSLayoutConstraints对象为UI元素设置动画。 NSLayoutConstraints对象可以是任何值,即; 高度,宽度,中心约束,顶部空间,底部空间,尾随或前导空间等。让我们深入研究示例。 我们将使用我在本文中创建的TableView应用程序:快速4的视差效果。 首先,在顶部菜单栏顶部的UIView。 让我们为其添加约束。 高度和宽度可以添加如下, 下一步是为按钮添加顶部空间和结尾空间约束。 将最高约束优先级更改为999 现在为UIView对象添加底部空间,并将其优先级设置为999 。 将值设置为40。 您可能会在情节提要中发现错误,而忽略它。 让我们为ViewController类的顶部和底部约束创建对象引用。 现在,在`scrollView`的`scrollViewDidScroll(_ :)`中添加用于更改菜单按钮底部和顶部约束的代码。 func scrollViewDidScroll(_ scrollView:UIScrollView){让contentOffset = scrollView.contentOffset.y-oldContentOffset.y如果contentOffset> 0 && scrollView.contentOffset.y> 0 {//向上滚动 if(menuUpConstraints.isActive){ menuBottomConstraints.isActive = true menuUpConstraints.isActive =否 animateConstraints() }} if contentOffset <0 && scrollView.contentOffset.y <0 {//向下滚动if(!menuUpConstraints.isActive){ menuBottomConstraints.isActive =否 menuUpConstraints.isActive = true […]

Objective-C和Swift —友好

有时候,对于Swift开发,仍然需要Objective-C。 例如,使用我在Swift,Speculid中内置的一个这样的应用程序,我需要引入Objective-C代码。随着2.0版中C ++库的引入,Objective-C成为必需。 幸运的是,有一些方法可以使Objective-C和Swift以友好的方式一起工作。 Speculid是使用最新版本的Xcode构建的完全开源的应用程序。 它可以自动将PNG和SVG文件转换为完整的图像集和应用程序图标的过程。 在第一个版本中,它需要安装Inkscape和ImageMagick以便于将图像从SVG或PNG转换为PDF或PNG。 这在安装和使用上都变得麻烦。 对于2.0版,我希望通过删除任何先决条件步骤和预先存在的依赖关系,使安装和集成过程尽可能地容易。 这意味着将所有必需的依赖项打包在应用程序包中。 在这种情况下,我们使用两个C ++库Cairo和libRSVG 。 开罗是整个开源社区中使用的领先2D库,而libRSVG用于读取SVG内容。 有了这两个库,接下来的挑战就变成了将它们集成到Swift代码中。 到目前为止,Swift无法直接与C ++交互。 因此,我们需要一个中介,并且这些中介可以是C或Objective-C的代码。 尽管C具有一些简单性,但在这种情况下,我选择了Objective-C。 我不仅拥有Objective-C的经验,而且Objective-C与Apple生态系统具有强大的集成。 尽管C的简单性。在我使用Objective-C时,我想将大部分代码保留在Swift中。 Objective-C仅在需要时用于与C ++库接口。 Swift将与用户交互,管理作业等……Objective-C将调用C ++库来构建实际的图形。 Swift代码将完全不了解实际用于读取,操作和写入结果文件的代码。 这是该过程的简要概述: Main —实例化并运行NSApplication SpeculidApplication —查找有问题的文件并使用Codable解析文件 查找源图形文件(PNG或SVG) 解析资产目录文件 解析规范文件中的规范 创建要传递给Objective-C代码的规范 在Objective-C中 ,使用传递给C ++函数的规范来写出目标图形文件(PNG或PDF) 有两种方法可以使我们的Objective-C和Swift代码协同工作。 一种是确保API使用兼容的类型。 Objective-C不使用Swift Structs。 这使类成为在Swift和Objective-C框架之间传递复杂数据的唯一方法。 但是,为了使接口彼此不可知,我们可以在Objective-C API中创建协议,这些协议可以向Swift表示所需的内容。 在我们的Objective-C框架中,Swift提供了两种方法。 调用Cairo库并采用ImageSpecificationProtocol和ImageHandle对象的主要方法: @interface CairoInterface:NSObject +(BOOL)exportImage:(id )sourceHandle withSpecification:(id )规范错误:(NSError **)错误; @结束 […]

在iOS应用中使用Coordinator模式的真实示例

当代的编程世界充满着潮流,谈论iOS应用程序是很重要的。 希望我没有误会说协调器是近年来最时髦的建筑模式之一。 因此,我们的团队在不久前意识到了尝试这种方法的不可抗拒的愿望。 特别是因为它获得了幸运的机会-逻辑上的重大变化和应用程序导航的全面重新开发。 该文章的第一版是用俄语编写的,并在此处发布。 问题 通常,视图控制器承担太多责任:它们直接“ UINavigationController命令”以拥有UINavigationController ,与同级视图控制器“通信”,甚至实例化它们并传递给导航堆栈,总的来说,它要做很多事情不在他们的责任范围内。 避免此类问题的一种方法是协调器。 事实证明,这还算是非常方便且非常灵活的:模式代码能够管理小模块(可能是唯一的屏幕)和整个应用程序(相对而言,直接从其开始)的导航事件。 UIApplicationDelegate )。 历史 Martin Fowler在他的《企业应用程序体系结构模式》一书中将这种模式称为应用程序控制器。 Soroush Khanlou被认为是iOS环境中的第一个推广者:它始于2015年他在NSSpain会议上的演讲。然后,他的网站上出现了一个思想片段,该思想片段具有多个扩展名(例如,这个扩展名)。 然后是许多概述(“ ios协调器”查询提供了许多质量和细节各异的结果),包括有关Ray Wenderlich的教程和Paul Hudson的“用Swift入侵”的文章(在有关“大规模”视图问题的系列出版物中)控制器)。 向前运行,最引人注意的讨论主题是UINavigationController “后退”按钮的问题。 因为点击它不会被我们的代码处理,所以我们只能有一个回调。 为什么有问题? 像任何其他对象一样,存在于内存中的协调器必须由另一个对象拥有。 通常,当通过协调器构建导航系统时,其中一些会创建其他并在其上存储强大的参考。 子项完成后,父项将控制权收回,子项协调器使用的内存必须释放。 Khanlou对问题的解决方案有自己的见解,并注意到其他一些推荐的方法。 无论如何,我们会回到原点。 第一种方法 在显示任何代码之前,我想解释一下,与真实的设计原则完全一致的代码片段和使用示例在不会妨碍良好感知的地方会得到简化和缩短。 当我们第一次开始尝试模式时,我们没有足够的时间和自由度:我们必须考虑现有的设计原则和公认的导航系统。 第一个版本基于拥有并控制UINavigationController的通用“路由器”。 它可以对UIViewController实例执行与导航有关的任何操作:“按下” /“弹出”,“显示” /“关闭”,以及使用“根视图控制器”的操作。 接口示例: 导入UIKit 协议路由器{ func present(_模块:UIViewController,动画:Bool) func dismissModule(动画:Bool,完成:(()-> Void)?) func push(_模块:UIViewController, 动画:布尔, 完成:(()-> Void)?) func popModule(动画:布尔) func setAsRoot(_模块:UIViewController) […]

Swift + Savannah =成功

Codebase的iOS培训实验室将为2018年春季课程做准备 当我们上次遇到我们的英雄时,他们是从Codebase的iOS培训实验室毕业的。 凭借其最出色的Swift知识和对构建软件的热情,他们已准备好走向世界。 快进到现在。 我们很高兴地欢迎Akash Shah,Jess Telmanik和Gary Skoglind成为学徒移动开发人员。 每个人都在为本地客户设计一个很棒的项目。 (敬请关注!)随着Codebase收到更多的客户工作,我们希望吸引更多希望在萨凡纳生活和工作时构建应用程序的应用程序开发超级明星。 您有成为移动开发人员所需的条件吗? 现在是您寻找答案的机会-我们正在接受2018年的申请! 为什么要使用代码库? 我们很高兴您的要求。 最好。 指令。 曾经 首先,我们的教学才能是首屈一指的。 首席开发人员和讲师Max Howell从第一部iPhone发布之前就开始构建应用程序。 他曾参与一些知名项目,例如TweetDeck(在Max任职期间被Twitter收购),Popular Pays和Poncho,后者于去年在Apps TV电视节目中脱颖而出。 他还是诸如PromiseKit和Mac的Homebrew软件包管理器之类的开源项目的创建者,这些项目被全世界的开发人员所使用。 一个惊人的社区 我们在加速学习方面有丰富的经验,与热情的讲师和一群同学一起在一个房间里是确保您取得成功的最佳方法。 另外,佐治亚州萨凡纳是学习新技能的好地方。 优美的环境和缓慢的步伐为生活增添了梦幻般的品质,科技界也对此充满了期待。 总有事情在发生,充满了聪明,有才华的人在乎使萨凡纳成为生活和工作的好地方。 持续的学习,成长和工作机会 当您从Codebase毕业时,您的旅程还没有结束。 如果您倾向于留在萨凡纳,则有很多参与的机会。 您可以参加或参加“使它成为移动”,这是有关移动开发主题的每月聚会。 您可以在PULSE Art + Technology Festival和Geekend等很酷的活动中,在公共的Hour of Code研讨会上教孩子们编码。 当然,我们的目标是在我们的开发店中聘请表现最好的人作为学徒。 我们希望在2018年的萨凡纳见到您。立即申请! 有什么问题吗 请通过hello@codebaseSAGA.com与我们联系。

快速地,Salesforce是一个框架,用于快速开发与之交互的本地iOS移动应用程序。

更新,2018年10月10日:Salesforce现在变得更加易于设置,配置和使用。 在GitHub上检查当前版本的README文件。 Swiftly Salesforce是一个框架,用于快速开发与Salesforce平台进行交互的本机iOS移动应用程序。 苹果公司的“安全,快速和交互式的现代编程语言”完全用Swift编写。 为复杂的异步Salesforce API交互提供简洁,轻松的编码 自动透明地管理Salesforce OAuth2授权过程(“ OAuth舞步”) 适用于iOS的Salesforce Mobile SDK的更简单,更轻便的替代方案 易于安装和更新 如何快速设置Salesforce? 您可以按照以下步骤在几分钟内启动并运行: 免费获得Salesforce开发人员版 设置Salesforce联网应用 在iOS上注册您的Connected App的回调URL方案(请参阅附录) 快速将Salesforce添加到您的Xcode项目: 将pod ‘SwiftlySalesforce’添加到项目的Podfile中(请参阅附录), 或仅将这些Swift源文件复制到您的项目中,然后添加相关框架 为Swift Salesforce配置您的应用程序委托(请参阅附录) 为salesforce.com添加ATS例外(请参阅附录) 最低要求: iOS 10.0 迅捷3 Xcode 8 文献资料 文档在这里。 尤其要查看Salesforce类的公共方法-这些可能是您需要从代码中调用的所有方法。 例子 下面是一些示例,以说明如何快速使用Salesforce以及如何链接复杂的异步调用。 您还可以在这里找到完整的示例应用程序; 它从Salesforce检索登录用户的任务记录,并使用户能够更新任务的状态。 Salesforce将迅速自动管理整个Salesforce OAuth2流程(“ OAuth交流”)。 如果Swiftly Salesforce具有有效的访问令牌,它将在每个API请求的标头中包含该令牌。 如果令牌已过期,并且Salesforce拒绝该请求,则Swiftly Salesforce将尝试刷新访问令牌,而不会打扰用户重新输入用户名和密码。 如果Swiftly Salesforce没有有效的访问令牌或无法刷新它,则Swiftly Salesforce会将用户定向到Salesforce托管的登录表单。 在后台,Swiftly Salesforce充分利用Alamofire和PromiseKit这两个非常广泛采用的框架,用于优雅地处理网络请求和异步操作。 示例:将您的应用程序配置为与Salesforce对话 导入UIKit 迅速导入Salesforce […]

任何和任何对象类型

Buyazımdaşukonularıanlatmayaçalışacağım: 有什么天体吗? Hangiamaçlakullanılmaktadır? Any&AnyObject库兰纳姆·阿拉纳基 Swift编译器Arka Planda Neleryapıyor? 任何türündenbirdeğişkenindoğrukullanımı 任何bir推荐人吗? 编译器buradanasıldavranır? 是否有türdendizilertanımlayabilirmiyiz? 任何ile AnyObjectarasındaki fark nedir吗? 迅捷的语言处理程序,可直接执行程序。 Diğerdillerindizaynından,sentaksyapısından,iyiyönlerindenfaydanılarakoluşturulmuş。 迅捷的programlama dilinin多范式 olduğunusöylemiştik。 Yani 面向对象的功能性程序,可用于程序设计。 Java,C#程序在对象中的作用。 C ++ dilinde iseböylebir teknik yoktur。 Swift Dili Burada C ++ Diline苯甲醚。 有什么天体吗? Hangiamaçlakullanılmaktadır? 任何önceliklebirtürdür 。 Herhangitürdenbir nesneye任何isimli birtüreatayabiliriz。 任何türündennesneyaratamayız。 Burada kiçözümyolu Referans bildirmektirçünkühertürdennesne anytüründenReferansa atanabilir。 Hemenörneğebakalım: Yukarıdaki grafikteherşeyçokaçıkduruyor。 AnyObjecttürüne是指türlerineilişkinnesneler atayabiliyoruz。 任何türüne都是她的türdennesne […]

为什么要投资Ios应用开发以增强业务?

为什么要投资Ios应用开发以增强业务? 随着世界变得无处不在,企业正在利用移动技术将其业务提升到一个新的水平。 鉴于Ios市场的普及和发展,iPhone和其他Apple设备对应用程序开发的需求急剧上升。 作为一个有远见的企业家,您肯定想利用Ios应用程序开发服务的优势,以便在这个竞争激烈的时代中生存和维持下去。 随着iOS的新版本和高级版本的发布,企业一直在寻找新的机会来为自己创造利基。 实际上,新的API,增强的UI和框架已成为iOS开发人员中的热门话题,他们希望为用户提供更好的解决方案。 随着每一个新版本的框架和应用程序的发布,iOS开发人员和企业都得到了应有的认可。 让我们快速看一下其中的一些模式: ‘Swift’-开发人员首选的编程语言: 目前,iOS应用程序开发市场受到一种新的编程语言(即“ swift”)的统治。 除了iPhone和iPad,该技术还与Apple Watch和Apple TV兼容。 它是一种多范例的编译语言,也与Linux兼容。 此外,新版本的swift即swift 2已被设计为更具兼容性和用户友好性,从而使开发人员能够更加专注于应用程序开发而不是技术。 2.免费版和付费版应用程序:当前的应用程序开发生态系统发现iOS更加关注付费版应用程序,而Android则专注于免费版应用程序。 现在,随着趋势的逆转,免费iOS应用程序的需求和下载量肯定会增长25%。 3,基于云的应用程序 众所周知,为基于云的应用程序铺平道路的云技术为开发人员以及最终用户都带来了无数的好处。 实际上,由于这些应用具有多小工具同步功能,因此它们肯定会在市场上保持主导地位。 换句话说,随着对手持设备的依赖性不断提高,移动商务市场正在稳步增长。 因此,作为佛罗里达州的企业家,如果您希望利用应用程序开发的好处,那么现在是时候去雇用拥有信誉的,可靠的公司的服务,该公司在Fl提供Ios应用程序开发 。 这样做可以使您在竞争者中遥遥领先,同时可以成倍地提升和提高业务利润。

对值类型使用领域

在本文中,我想探讨如何使用基于struct的模型和类型安全的查询在Realm之上构建数据持久层 。 如果您在过去的两年中一直被碳酸盐岩所冻结,那么Realm是一种从头开始为移动设备构建的数据库技术,它实际上是Apple世界中Core Data的替代品。 与Core Data一样,Realm需要子类化来定义模型对象,并且仅允许在创建它们的线程上使用它们。 这些要求和其他要求通常会增加复杂性,并且通常会在应用程序中的任何地方增加与Realm的耦合。 这就是为什么将这些框架视为实现细节并将它们抽象到持久层下通常是一个好主意的原因。 楷模 例如,让我们创建一个持久层,以将漫画书中的超级英雄角色与其发布者一起存储。 我们可以使用几个结构来定义我们的模型: 公共结构发布者{ 公共租用标识符:Int 公开名称:String } 公共结构字符{ 公共租用标识符:Int 公开名称:String public let realName:字符串 公开让发布者:发布者? } 尽管我们仅将它们仅用作传输机制并将它们对应用程序的其余部分隐藏,但我们仍然需要创建相应的RealmSwift.Object子类。 最后一个类 PublisherObject:对象{ 动态var标识符= 0 动态var名称=“” 覆盖静态函数 primaryKey()->字符串? { 返回 “标识符” } } 最终课程 CharacterObject:对象{ 动态var标识符= 0 动态var名称=“” 动态var realName =“” 动态var发布者:PublisherObject? 覆盖静态函数 primaryKey()->字符串? { 返回 “标识符” } } 制图 我们需要一种机制来将基于struct的模型转换为其相应的Realm对象。 让我们为此定义一个协议: […]

运行时中的动态TabBar项-iOS(Swift)

假设您有一个同时提供免费和高级内容的应用程序。 显然,您不希望免费用户访问针对高级用户的内容。 例如,我们正在向用户提供在线视频课程。 免费用户可以访问和流媒体免费视频。 高级用户可以流式传输所有视频,下载视频,访问社区论坛并提出问题与解答。 根据用户的计划,我们有一个API可以提供该用户可用的功能列表。 例如,考虑API的JSON响应如下所示。 JSON响应(免费用户): { “计划”:“免费”, “功能”:[“视频”,“个人资料”] } JSON响应(高级用户): { “ plan”:“ PAID”, “功能”:[“视频”,“论坛”, “下载”, “轮廓” ] } 解析完上述JSON响应后,我们将获得功能列表。 然后,我们将迭代并将不同的TabBar项目添加到UITabBarController。 让我们创建一个枚举来定义一组功能。 这提供了当前版本应用程序的所有可用功能。 枚举功能:字符串{ 案例视频=“视频” 案例下载=“下载” 案例论坛=“ FORUMS” 案例档案=“ PROFILE” } 现在,我们从JSON响应中获得了免费用户和付费用户的功能列表。 让我们开始迭代视图控制器以显示在UITabBarController中。 为所有功能选项卡加载视图控制器 上面的代码似乎有很多字符串和重复的代码。 我们可以通过涉及一种新类型来重构它。 让我们创建一个TabItem类型来封装所有信息,并使它看起来更干净。 提取常用属性以显示“选项卡项目” 使用TabItem类型,我们将所有字符串提取到一个类型中,并创建了静态TabItem以定义不同的选项卡。 另外,我包括了order属性,以使选项卡项保持我们想要的顺序。 我还在TabItem中添加了一个辅助方法,以从相应的故事板上加载视图控制器。 加载“功能”选项卡的视图控制器的助手方法 使用上述方法,我们可以将TabItem类型转换为要加载的ViewController。 这将有助于消除重复的代码。 加载用于运行时功能列表的所有视图控制器的超级简单方法。 将所有TabItem添加到数组中之后,我使用顺序对其进行了排序,还将它们转换为ViewController。 而已。 我们完了。 多田!! 🎉 改进之处: 无需对ViewControllers名称进行硬编码,我们可以按照我在此处说明的方式从类型中提取:https://medium.com/@dinaraja/load-view-controllers-effortless-swift-dd49f11f1d99 […]