Tag: swift

ReactiveKit和Bond部分1.3

可观察的性质 如果您在前几篇文章中一直在关注,那么我一直在写关于如何使用咖喱函数来实现Target-Action模式和创建Event类的信息。 这篇文章将把所有内容汇总在一起,并展示如何在类上创建可观察的属性。 如果您还没有检查过我以前关于事件的帖子,或者没有从我链接了1亿次的Scott Logic博客中阅读此帖子,则应该这样做,以便完全了解我在这里要写的内容。 在这篇文章之后,我们将对如何完全在Swift中执行Observer模式有一个很好的理解,并且我们可以回到讨论ReactiveKit和Bond的角度。 首先,我们的目标是什么? Swift中的可观察属性会是什么样? 好吧,我们需要一个其属性设置为新值的类,该类将发出警报,告知要执行的其他功能。 例如: 蝙蝠侠类{ 让numberOfSidekicks:Observable (0) } 然后,当我们实现此类时: VC类:UIViewController { var bruceWayne =蝙蝠侠() bruceWaye.numberOfSidekicks.updated.addHandler(self,handler:VC.sidekicksChanged) func sidekicksChanged(oldValue:Int,newValue:Int){ 如果oldValue> newValue { print(“哦,没有蝙蝠侠!你的同伴之一死了!很典型。”) }其他{ 打印(“蝙蝠侠!您有一个新的助手!我们将看到持续多长时间。”) } } } //然后,如果发生这种情况: bruceWayne.sideKicks + = 1 //控制台将打印出:“蝙蝠侠!您有一个新的助手!我们将看到持续了多长时间。” 这很酷。 我们很开心。 现在让我们构建Observable类: class Observable { let didChange = Event() private var value : T init (_ […]

迅速—微调器

2.单击其所在的指示器视图,然后选中“属性”检查器中的“停止时隐藏”复选框,如下所示。 3.将带有相应指示器的IBOutlet连接到控制器文件。 @IBOutlet变量微调框:UIActivityIndi​​catorView! 4.将UIWebViewDelegate协议添加到该类,并通过在viewDidLoad方法的顶部插入以下代码来注册委托。 类DetailViewController:UIViewController,UIWebViewDelegate { …。 覆盖func viewDidLoad(){ Self.webView.delegate =自我 // webView是WebView的IBOutlet名称 } 5.最后,在加载页面时,可以在加载失败时插入操作。 Func webViewDidStartLoad(webView:UIWebView){ //当WebView开始加载页面时 Self.spinner.startAnimating() } Func webViewDidFinishLoad(webView:UIWebView){ // WebView完成页面加载后 Self.spinner.stopAnimating() } Func webView(webView:UIWebView,didFailLoadWithError错误:NSError?){ //当WebView无法加载页面时 Self.spinner.stopAnimating() }

Swift开发人员认证-帮助Cell Builders在应用程序升级中提升

Swift开发人员认证 需要使用Swift iOS开发人员认证课程进行高级学习。 携手努力,提高对这一特殊高级培训班的认识。 对于所有痴迷于所有申请表以及开发过程的有抱负的人,他们可以提供许多培训计划和教练课程。 我们将迫使您了解Apple iOS增长的细节。 来,让我们简要地介绍一下。 Swift开发简介 最初,快速是由所谓的品牌Apple生产的编程术语,因为它的系统包括iOS,tvOS,Mac-OS,watchOS和Linux。 快速发展的最重要目标是创建可扩展的编程。 但是,主要主题是安全性。 苹果公司始终专注于信息安全。 这是Swift的诞生记录。 课程说明 首先,有抱负的人可以知道课程的基础知识,即发布区域,使用的工具和技术,以及了解Swift开发者认证所必需的能力。 在此初始区域的结尾,有抱负的人将能够证明程序的中间应用程序迅速产生。 有了这种意识,考生可以开发iOS的基础知识。 将来,毫无疑问,我们的教育专业人员将为学生提供诸如语法,内存管理,面向对象的基础知识,操作概念等编程理论。 这是一门专门针对大学生的特殊课程,他们对了解计划的改进并希望在此技术中接受高等教育感到满意。 我们专用的工作人员致力于教学Illustrator,以使其快速发展。 除了新颖的特性和技巧外,申请人还将在编写iOS程序方面处于领先地位。 快速版偶尔会更新。 现在,它是4.2版。 我们的说明可能通常取决于升级后的版本。 因此,我们使用加速变化4以及主要模型来向大学生进行教学,以了解基本技术和理论。 课程目标 这是一个纯粹的学习课程,它将使您具备心脏知识,从而成为熟练的iOS开发人员。 通过此特定的Swift开发人员认证课程,有志者将了解此iOS版本10的基本操作,以及使用快速版本3.0或4.0进行传达的过程。 此外,候选人还将通过创建自己的应用程序(这些应用程序的一部分)来获得程序演变的首次专业知识。 程序开发人员的需求每天都比程序员高。 他们可以通过不断增长的硬件和软件来创造价格。 对于喜欢在应用程序进度方面表现出色的人来说,本课程可能是最佳/最佳选择。 作为参加此培训班的一种方式,学生将掌握一些细节,包括Mac笔记本电脑或计算机,甚至可能不一定需要iPhone,iPod或iPad。 该计划的优势 我们的学院为珍贵的学生提供各种认证课程,以一种特殊的方式来激发他们的未来。 此外,它基于所有学生的热情。 我们的专业人士可能会与有抱负的人一起交谈,以了解他们的关注主题,并使他们做得越来越多。 结果,学生将选择在自己舒适的领域闪耀的道路。 在本培训课程结束时,学生将能够学习 ·同时实现iOS 12和快速编程版本3.0和4.0的质量 ·快速理解和完善编程的要点 ·准确地编写界面和布局,以及UI的组件 ·成为处理不同流程,课程以及消息,通知和Siri包执行集成的专家。 ·为每一堂课构建使用iOS的技术和功能的应用程序表单。 毕竟,培训将了解这一刻并完成练习中涉及的方法。 该证书课程是当前情况下蓬勃发展的课程,例如CISCO课程以及Python课程。 因此,潜在的程序员将利用这一点,并在新的旅行中获得乐趣。

什么是致命错误以及何时使用它们?

在进行以下 操作 之前,请先阅读本文: 快速处理错误 。 Apple文档链接: swift中的致命错误 。 工作:无条件打印给定消息并停止执行。 如果您在大洋中,不知道要去哪里?? 不知道该怎么办??,最好的选择是留下信息并下沉!!! 可能有人会找到您-这正是致命错误所要做的。 宣言: 致命错误是一种在控制台上打印给定消息并在执行时停止执行应用程序的方法。 该错误将更加具体,因为它将具有文件名和行号,以便于调试。 从声明中,我们可以看到fatalError(:)方法的参数。 它接受一个@autoClosure ,它不带任何参数并返回一个string 。 因此,消息可以是任何返回String表达式。 如果您不熟悉@autoClosure ,请快速浏览我的另一篇有关闭包的文章。 其他两个参数包括编译器自动采用的line number和file name 。 我们不必为此烦恼。 我们只需要传递一个错误消息字符串即可。 永不返回类型: 在上面的函数声明中,您可以看到函数返回类型Never 。 下面提供了有关Never类型的文档。 在声明无条件引发错误,陷阱或其他情况不会终止的闭包,函数或方法时,请使用Never作为返回类型。 有一些函数可立即终止该过程,并且不会返回到调用方。 在Swift 3之前, @noreturn在Swift中使用@noreturn属性标记。在swift 3中, @noreturn属性被替换为Never返回类型。 具有“ Never作为返回类型的函数还可以用于标记“不应发生”的情况并指示编程错误。 如何调用致命错误? 我们以两种方式之一使用功能: 没有消息: 致命错误() 我在viewDidLoad方法中添加了上述代码,这是执行fatalError()时在控制台中打印的fatalError() 。 2017–07–26 10:42:01.862958 + 0530计算器[1887:495386]致命错误:文件/Users/abhilash/Desktop/Calculator/Calculator/ViewController.swift,第95行 带有错误信息: fatalError(“错误:未知操作。”) 我在viewDidLoad方法中添加了上面的代码,控制台将其打印出来: 2017–07–26 […]

iOS上的网络可达性状态监视(第1部分)

如今,您几乎找不到不需要任何服务器端支持即可执行其任务的应用程序。 随着时间的推移,几乎所有应用程序都从iOS应用程序收集数据并将其保存在远程服务器中,以便为其用户提供更好的基于云的服务。 所有基于云的应用程序都需要监视网络连接状态,以便为其用户提供更好的用户体验。 我们可以在Mail , Safari , App Store,Test Flight,Google Drive,Skype等中找到它们。 您可能已经使用Apple的Reachability Objective-C类处理了此类情况。 您可能希望为此提供一种Swift解决方案。 我对吗? 是? 深吸一口气,您已步入正轨。 您需要一个好的开始: 在Xcode中创建一个名为NetworkStatusMonitor的新单视图应用程序 。 我们将使用Ashley Mills创建的Reachability swift库 。 感谢 @ashleymills提供这个有用的库。 在iOS中集成此类库的最流行的方法是CocoaPods 。 如果您以前没有使用过此工具,请通过此 步骤在系统上安装CocoaPods 。 现在,从终端将目录路径更改为项目的根目录。 现在我们将在终端中使用以下命令初始化pod 荚初始化 它在项目的根目录中创建一个简单的pod文件 。 在TextEdit中打开此pod文件,对其进行编辑并保存以下内容。 #取消注释该行以为您的项目定义一个全球平台 #platform:ios,’9.0′ 目标’NetworkStatusMonitor’做 #如果您不使用Swift且不​​想使用动态框架,请对此行添加注释 use_frameworks! #NetworkStatusMonitor的Pod pod’ReachabilitySwift’,’〜> 3’#将库添加到您的项目中 目标’NetworkStatusMonitorTests’做 继承! :search_paths #测试豆荚 结束 目标’NetworkStatusMonitorUITests’做 继承! :search_paths #测试豆荚 结束 […]

在Swift中包装C库(第1部分)

这篇文章是在Swift中包装C库的多部分指南中的第一篇。 第1部分将逐步完成构建Swift项目的过程,该项目可以使用Swift Package Manager(SPM)与C库libgraphqlparser进行交互。 其他部分将介绍如何将C接口包装为使用起来更自然的Swift API。 在探索特定库的示例时,此处描述的相同技术可以应用于大多数其他C库。 自2016年以来,在Shopify,我们一直在移动应用程序中使用GraphQL。GraphQL提供的优于典型REST API的优势之一是它具有定义明确的架构。 可以利用GraphQL模式编写代表各种查询和变异的网络响应的强类型Swift代码。 这段代码编写起来很繁琐且容易出错,因此我们决定构建一个可自动生成代表您的GraphQL查询和变异的Swift模型的工具。 构建这样的工具的首要挑战之一是找到一种方法来解析GraphQL语法中定义的查询和变异,并将其转换为可由Swift代码理解的抽象语法树。 构建语法分析器并非易事。 幸运的是,GraphQL组织已经发布了一个用C ++编写的开源解析器。 Swift无法直接与C ++代码互操作,但是libgraphqlparser项目提供了一个纯C API,只需做一点工作,就可以在Swift中使用它。 libgraphqlparser库的标头中定义了一些功能,可以完全满足我们的需求。 从libgraphqlparser的C头文件 第一个函数将采用GraphQL查询字符串,并将其转换为查询的AST表示形式。 对于本教程,我们将仅使用graphql_ast_to_json(ast)将AST转换为JSON并打印结果。 设置基本软件包 SPM要求定义一个包装系统库的Swift软件包,但是由于没有Swift代码,因此无法直接构建该软件包。 为了验证该库可以导入到Swift代码中,基本包必须将包装器包作为依赖项导入。 让我们构建该基本软件包。 $ mkdir GraphQLParser $ cd GraphQLParser GraphQLParser $ swift软件包init –type可执行文件 安装库 安装libgraphqlparser可以通过从源代码构建或使用以下命令通过自制程序来完成。 $ brew安装libgraphqlparser 完成初始项目设置后,我们需要将代码公开给Swift。 由于这是针对macOS命令行应用程序的,因此我们可以使用Swift Package Manager(SPM)。 为了向Swift代码公开系统库,我们需要告诉编译器在哪里可以找到我们要使用的代码。 通常,这包括将动态库的位置和任何必需的头文件的位置通知编译器。 在这种情况下,动态库可能已安装到/usr/local/lib/libgraphqlparser.dylib ,并且头文件将已写入/usr/local/include/graphqlparser 。 SPM通过要求用户定义一个包装系统库的程序包并为该库提供模块映射来解决此问题。 约定是在这些程序包之前使用大写的“ C”作为前缀,因此该程序包将被称为“ Clibgraphqlparser”。 在与GraphQLParser文件夹相邻的目录中初始化此软件包。 GraphQLParser […]

来自.xib的iOS自定义UIView

在iOS App开发中,创建自定义视图是非常常见的做法。 我们经常创建自定义视图以实现可重用性,以分隔责任或分离依赖关系等。尽管在该主题上有大量的stackoverflow答案,媒体,博客等,但是要找到一个简洁而全面的创建自定义视图的示例非常困难来自.xib。 让我们从以下步骤开始: 步骤1 创建一个单视图应用程序项目 Setp 2 如下图所示添加一个.xib文件,并将其命名为“ CustomView” 第三步 就像上一步一样,添加CustomView类。 这次选择CocoaTouch文件,并在subclassof部分中选择UIView,并将其命名为“ CustomView” 步骤4 选择CustomView.xib文件,然后从Xcode的属性检查器中将CustomView.xib的文件所有者设置为CustomView类,如下所示。 现在,出现了许多问题,例如:什么是文件所有者? 或为什么不设置子类而不是文件所有者? 等等 需要记住的几点: 文件fileowner是加载笔尖的对象,即文件loadNibName:收到消息loadNibName:或initWithNibName: loadNibName: 如果要在装载后访问笔尖中的任何对象,则可以在文件所有者中设置出口。 ViewController充当情节fileowner中View的文件所有者,这就是为什么我们没有在情节fileowner显式设置View的文件所有者。 之所以将其称为文件所有者并给予特殊的位置,是因为与笔尖中的其他对象不同,文件所有者位于笔尖外部,而不是笔尖的一部分。 实际上,只有在装入笔尖时它才可用。 因此,文件所有者是实际对象的替代者或代理,该对象随后将加载笔尖。 因此,您创建了带有许多子视图的精美视图,例如:按钮,标签等。 如果要在加载笔尖之后随时修改这些子视图中的任何一个,我们可以将这些对象的出口设置为fileowner 。 每当我们从xib创建自定义视图时,我们都将其文件所有者设置为自定义子类。 如果现在在Xcode中选择助手编辑器,它将为选定的CustomView显示相应的类CustomView ,如下所示。 第5步 将以下代码添加到CustomView类 我们在两个地方设置文件fileowner 在.xib文件中,如步骤4所示。 我们这样做是为了我们可以得出结果和采取行动。 如果不设置文件fileowner Xcode将无法连接出口和动作 如下所示,在fromNib方法中以编程方式显示为loadNibName方法,将fileowner作为参数。 如果我们发送nil而不是self,它将覆盖先前将fileowner分配给nill 。 将下面的代码添加到您的视图控制器 结论 这就是从.xib创建自定义视图的全部内容。 如果您喜欢本教程,我强烈建议您阅读有关表视图预取的另一篇文章。 够说话了。 现在让代码谈谈: rokonuddin / CustomView 通过在GitHub上创建一个帐户为rokonuddin / CustomView开发做出贡献。 […]

热门iOS 10 Objective-C和Swift 3.0代码示例

自2008年iOS推出以来,已有超过200万个应用下载了1300亿次。 iOS平台的普及并不是什么秘密,每次新的迭代都带有巨大的期望。 借助iOS 10,Apple为iPhone和iPad开发人员提供了对该软件的更多控制权,引入了允许创建新类别的应用程序和功能的新框架和工具。 为iOS 10开发的应用程序还扩展了系统服务,以提供更多引人入胜的功能。 iOS 10中有许多新功能,但是在本文中,我们将为发现最有趣和有用的示例提供示例。 UIViewPropertyAnimator iOS 10引入了一种编写动画代码的新方法:使用UIViewPropertyAnimator。 这不是现有API的替代,也不是客观上“更好”,但它确实为开发团队提供了以前无法实现的控制水平。 从本质上讲,UIViewPropertyAnimator增强了在我们的应用程序中创建动画的选项。 新选项包括停止动画和恢复动画(以及其他时间参数),随时结束动画,反转动画或将其移动到任何选定的时刻等等。 另一个新颖的事实是,除了以前使用的动画定时选项(例如EaseInEaseOut)之外,我们现在还能够基于三次函数的检查点定义自己的时间函数。 在iOS 10之前,在iOS上执行基于手势的可中断动画是一项麻烦的任务,通常需要第三方框架。 仅动画时间的精细控制就可以使Property Animator改进我们现有的UIView动画。 但是,它们真正闪耀的地方是当您创建的动画不只是一劳永逸时-我们希望用户能够抓取动画对象并与之互动。 在Objective-C和Swift 3.0中查看UIViewPropertyAnimator的代码示例。 呼叫工具 iOS 10 CallKit是一个全新框架,在WWDC 2016上首次引入。CallKit使您的Internet协议语音(VoIP)应用程序与本机Phone UI紧密集成,从而极大地增强了用户体验。 VoIP并发症 在CallKit之前,VoIP呼叫只是一个通知。 用户无法区分传入的文本消息通知和传入的电话通知之间的差异。 自然,这导致大量未接电话。 在锁定的屏幕上,即使用户设法通过滑动通知来接听电话,他/她也需要输入密码,并被重定向到应用程序,然后才可以开始讲话。 在未锁定的屏幕上,体验同样差劲,因为来电通知只是屏幕顶部的横幅。 更进一步,发出呼叫要求用户启动VoIP应用程序并从那里启动它。 iOS 10 CallKit的改进 CallKit解决了所有这些复杂问题。 借助iOS 10 CallKit,第三方VoIP应用程序可能成为用户拨打和接听电话的主要方式。 来电具有丰富的本机UI,带有接听和拒绝按钮以及用户的自定义铃声。 可以通过本地电话应用程序的联系人,收藏夹和最新消息(通过Siri,通过蓝牙或CarPlay)完成通话。 iOS 10 CallKit允许VoIP呼叫与电话呼叫,FaceTime呼叫甚至其他VoIP呼叫相互作用。 系统知道所有呼叫后,便以相同的优先级处理它们。 这意味着当接到电话时,VoIP呼叫不再处于保留状态。 此外,用户可以使用“请勿打扰”功能,可以阻止联系人或静音呼叫,甚至可以在进行中的呼叫和保持的呼叫之间进行交换,无论其类型如何。 **注意:此示例需要在设备上构建** 在Objective-C和Swift 3.0中查看CallKit的代码示例。 SiriKit SiriKit是一个新框架,允许开发人员将其应用程序的内容和服务与Siri集成在一起,因此用户可以仅凭自己的声音进行操作。 […]

我们为什么参加会议? #dotSwift🇫🇷

介绍 作为开发人员,您知道技术在不断发展。 因此,为了成功,您也需要不断发展。 您可以使用书籍,课程,论坛等,但是今天我将讨论会议,尤其是一个会议, dotSwift (适用于iOS和Mac开发人员)。 本文旨在帮助您了解是否适合您的开发者会议。 然后,您可以判断是否值得参加这样的会议。 会议 dotSwift 2019于1月28日在巴黎举行。 大门在下午12点打开以进行注册和联网。 第一次谈话是在下午1点,因此我们有足够的时间结识新朋友,还可以挑选一些免费赠品,例如dotSwift球和照明充电器。 我在这里与Future Platforms的同事Damien,BBC的Dani和前Moonpig的Alberto在一起。 讲者 整个会议期间都有很多演讲者。 dotSwift为观众中的所有级别的开发人员进行了讨论。 每个人都有东西。 我并不是每天都可以与Apple的工作人员交谈,因此能够聆听Johannes真是太好了,Johannes提出了一些低级技巧来提高性能。 对于像Lea这样的其他人,可以从更高的角度解释如何处理单元标识符 。 谁曾经使用标识符重用 UITableViewCell 子类? 我获得了使用Lea关于泛型的代码示例的许可。 它允许开发人员删除不必要的标识符,并通过单元类推断它们。 许多景点可以参观,例如巴黎圣母院,凯旋门等。 夜间是在巴黎参观一些景点的合适时间 。 卢浮宫博物馆展出的最著名的莱昂纳多·达·芬奇照片,其外表非常漂亮。 第二天,星期天,我们走进了埃菲尔铁塔。 有点拖拉总是很好的,尽管老实说,这是我一直随身携带的小雨伞,因为它适合放在我的背包里。 幸运的是,法国人民似乎还有更多重要的问题要担心。 优步池 关于城市的夜生活,没有音乐的生活是什么? 我创建了一个播放列表,其中包含在巴黎听到的几首“时髦”歌曲。 这些是当我跳到Uber背后时,一些当地巴黎人正在听的歌! 我们看到了什么? 到目前为止,到目前为止,我们已经谈到了会议及其举办城市的话题。 评估关键点,看看是否值得这样做,这将是一些关键的利弊。 优点✅ 学习和提高 联网 发现 旅游 缺点👎🏼 天气(直到您参观巴黎,英国的天气才不好) 一天的会议很短,相关的培训费用很高。 结论 我可以说我很幸运,之前在今年夏天的AltConf会议上与Dani会面(会议在圣何塞的WWDC旁边并行举行),他谈到了可访问性。 所以我已经知道有人要去dotSwift了。 詹姆斯·邓普西(James Dumpsey)每年都与AltConf接近,与他的小组“ The […]

在Swift中实现编程语言—第6部分:解析变量

注意:这是“用Swift编写编程语言”教程系列的第六部分。一定要检查 以前的内容 。 在之前的教程中,我们创建了第一个解释器。 现在是时候使用一些真正的编程语言功能来启动它,首先是对变量的支持。 为了提供可变支持,我们的语言需要两个附加功能: 支持解析变量名 支持声明变量 本教程全部关于第一(“支持解析变量名”)。 解析变量名。 此功能会创建两种错误情况,首先将它们添加到Parser.Error枚举中: 枚举错误:Swift.Error { 预期情况 预期大小写 预期情况 预期情况 预期大小写(字符串) case notDefined(String) } 添加对解析变量的支持相当简单,只需执行几个简单的步骤。 首先,我们需要在Lexer中添加对变量名称的支持。 为此,我们要做的就是将一个案例identifier添加到我们的Token枚举以及一个生成器: 枚举令牌{ typealias Generator =(String)->令牌? 案例操作员(操作员) 案例号(浮点数) 案例解析 案例解析 案例标识符(字符串) 静态var生成器:[String:Generator] { 返回[ “ \\ * | \\ / | \\ + | \\-”:{.op(Operator(rawValue:$ 0)!)}, “ \\-?([0-9] * \\。[0-9] + | [0-9] […]