Tag: iOS应用程序开发

迅捷每周提示– III

大家好, 我们正在分享“快速每日提示”的第三包。 每周提示列表 传递运算符 算子∈ CaseIterable协议 随机播放和随机播放功能 计算属性 静态类型属性 类型方法 如果您想分享技巧,则可以从GitHub打开请求请求。 您还可以阅读 Weekly I和 Weekly II 。

使用Alamofire 5和可编码的第1部分:在Swift 4中编写网络层:API路由器

如今,使用Web服务API是现代移动应用程序开发的重要组成部分。 在本文中,我想分享一种使用Alamofire和Swift 4设置网络层的简单方法。 我们将在构建API客户端时完成以下步骤: API路由器:端点构建器 API客户端:创建并执行请求 可编码:解析JSON并映射到数据结构 使用未来/承诺 使用反应式编程(ReactiveCocoa和RxSwift) 在第一部分中,我们将重点介绍请求构建器组件。 API路由器:端点构建器 具有一个提供端点的API请求构建器组件很重要。 路由器将使用HTTP method , HTTP headers , path和parameters来呈现端点 推荐的方法之一是使用Swift Enum创建我们的API路由器。 这是路由器的实现: 端点构建器 理想情况下,您有一个Constants.swift文件,可以将所有常量都放在一个位置

使用Swift在iOS中实现登录/注册功能

本文适用于刚刚开始快速开发ios应用程序的用户。 最大程度的初学者友好内容使用情节提要用于此类事情,因此我决定创建一些没有情节提要的内容。 让我们开始吧。 打开Xcode,选择File-> New-> Project。 构建并运行后,您应该看到模拟器以白色视图启动。 现在选择情节提要,您将看到一个白色的场景/视图,选择它并单击删除。 另外,删除ViewController.swift文件。 我们将从头开始。 现在,如果您运行该项目,您将看到一个空白屏幕。 如果您看到该日志,则会发现以下消息: 无法实例化UIMainStoryboardFile’Main’的默认视图控制器-可能未设置指定的入口点? 这是说该项目当前没有任何入口点。 很快,我们将提供一个控制器类作为该应用程序的入口点。 选择文件->新建->文件。 您将看到一个可用模板的窗口。 选择“快速文件”。 它将询问您文件的名称。 给SignUpController,最后按Enter。 选择SignUpController.swift文件,删除所有内容并复制粘贴以下代码。 我们要添加一个橙色视图作为200点的顶视图。 我们如何实现这一目标? 让我们为此创建一个橙色视图。 将以下代码放在viewDidLoad方法上方。 在这里,我们看到表单已经准备好了。 至此,视图部分已完成。 不幸的是,它不响应任何用户操作。 为了启用该功能,我们将以下代码添加到signUpButton: 我们以两种不同的方式为我们的注册表单提供了空文本字段验证。 现在,您可以随意进行一些复杂的验证。

AR的局限性–逃脱房间— AR

AR的局限性 随着9月中旬将在iOS 11上发布ARKit,并在Android上发布了ARCore,数亿消费者现在可以使用自己拥有的设备来体验增强现实。 已经几个月了,但是还没有发布改变游戏规则的应用程序。 这是为什么? AR的当前局限性是什么?在不久的将来,我们会看到AR在哪里发展? 像任何应用程序开发一样,在AR上进行构建是一项跨学科的工作。 借助AR,开发人员需要设计师,3D建模人员和编码人员来组合一个项目。 随着移动应用程序的开发,UI设计可以很容易地被黑在一起。 借助AR,3D建模存在瓶颈,如果无法负担3D建模师的费用(随着VR / AR开始获得更多关注,他们将成为热门商品),领先的开发人员需要在Blender等程序中学习建模)。 这是缺少热门的AR应用程序的原因之一。 另一个是技术本身。 我们的应用程序Escape The Room正在使用Unity的ARKit插件开发,并在Blender中生成3D资源。 这些程序非常有用,并且不受限制。 需要做出的重大飞跃是与UI / UX相关的。 人们还不知道如何使用AR应用程序。 我们正处于UX的发现阶段,就像多点触摸/滑动需要一段时间才能适应,然后变得自然一样。 现在,如果您为用户提供一个新的AR应用程序,他们将在控件上摸索一下,并最终意识到如何使用该应用程序。 应用程序中将需要教程,以向所有经验水平的用户展示如何使用该应用程序。 随着流行的AR应用程序数量的增加,将会出现一种共享语言。 目前,ARKit仅跟踪水平面,即使那样也可能是一个挑战。 要开始我们的游戏以及许多其他AR应用程序,用户需要扫描周围的环境,以便该应用程序可以检测水平面并将对象放置在该表面上,从而使其看起来与用户处于同一环境中。 这个过程并不总是无缝的。 根据照明情况,用户如何操作设备(移动太快,移动太慢,将手机保持在奇怪的角度)平面可能无法检测到。 这导致用户尴尬地走动而不是真正玩游戏。 这是需要解决的巨大摩擦。 像我们这样的开发人员需要帮助在AR UX上教育用户。 迫不及待想看看您的构建!

IOS面试常见问题解答(2018年8月)第2部分

Q1。 为什么@ property / @ synthesize不存在? Swift不区分属性和实例变量(即属性的基础存储)。 要定义属性,只需在类的上下文中声明一个变量。 如果您有使用Objective-C的经验,您可能会知道它提供了两种将值和引用存储为类实例的一部分的方法。 除了属性之外,您还可以将实例变量用作存储在属性中的值的后备存储。 Swift将这些概念统一为一个属性声明。 Swift属性没有相应的实例变量,并且不能直接访问该属性的后备存储。 这种方法避免了在不同的上下文中如何访问值的困惑,并将属性的声明简化为单个确定的语句。 有关属性的所有信息(包括名称,类型和内存管理特性)都在单个位置中定义,作为类型定义的一部分。 Q2。 如何实现可选功能? 可选在Swift中作为enum类型实现。 有关如何完成此操作的示例,请参阅Apple的Swift Tour: 枚举OptionalValue { 情况无 案例Some(T) } Q3。 声明一些常量变量并在创建该类的实例期间进行初始化? 对于类实例,只能在引入常量的类的初始化期间对其进行修改。 子类不能修改它。 您可以在初始化期间的任何时候为常量属性分配一个值,只要在初始化完成时将其设置为确定值即可。 为常量属性分配值后,就无法再对其进行修改。 Q4。 定义一个变量,并在设置该变量时将其保留计数增加4,您将如何做? var vc1:NSDate? = NSDate() print(CFGetRetainCount(vc1))// 2-我期望它是1,因为只有一个变量强烈引用此对象。 var vc2:NSDate? = vc1 print(CFGetRetainCount(vc1))// 3-参考计数增加1(强参考) var vc3:NSDate? = vc2 print(CFGetRetainCount(vc3))// 4-参考计数增加1(强参考) Q5。 为什么网点薄弱? 苹果公司在其示例代码中使用的最常见的一种代码遵循以下模式: @IBOutlet私有弱变量some​​Label:UILabel!@IBOutlet私有弱变量some​​Label:UILabel?@IBOutlet私有弱变量some​​Label:UILabel? 这些示例均遵循3条简单规则: […]

所有罪名成立:针对纸质日志的5项指控

当我乘飞机出海代表Proxyclick和Gregory参加纽约市的The Next Web 2015大会时,我才刚刚开始新工作的几周,在那次大会上,我们发布了全新的iOS信息亭应用程序的Beta版。 在我们的行李箱中:我们展位的纸板墓碑。 铭文重量轻,但携带笨重,整体信息沉重,上面写着: “ RIP-这是书上的签名。 寿命长,但过时了。” 您现在可能会和会议前几天有完全相同的想法:“有没有什么比墓碑吸引人了? Proxyclick不仅涉及款待和热情的接待吗? 我们是否不想对参观我们展位的人们给予类似的欢迎?” 但是后来打了我。 显然,将墓碑带到会议上是一种挑衅。 这场活动引发了有关“万圣节”摊位的活动的对话,吸引了很多参观者到我们这里,因为人们好奇地想知道这是怎么回事。 但是,寻求关注的营销效果只是副产品。 我们在Proxyclick上真正想传达的是,杀死书本签名并在前台用iPad替换它是您为使公司款待更上一层楼而必须犯下的罪恶。 为什么? 请继续阅读,因为我将签署书试用,并阐明了您的公司将日志放在今天而不是明天的死囚牢中的原因。 指控1:登录书侵犯了访问者的隐私 通过要求访问者使用传统日志进行登录,他们提供的是有关他们自己的机密信息,有时甚至是详细信息。 任何在其后登录的访问者都可以阅读该信息。 这种侵犯隐私的行为有两个原因: 您无法控制是否有人利用轻松访问他人的个人数据的优势 如果访问者可以看到其他人的详细信息,您会给他们留下印象,即他们的数据不安全 纸质日志有罪。 指控2:签署的书使您建筑物的安全受到威胁 登录簿中访问者数据的可见性使许多客人不愿正确填写所有字段。 往往是假名称或其他不正确的详细信息,空白字段或错误的笔迹。 在紧急情况下,在任何给定时间对所有外部访问者进行清晰,最新的概述至关重要。 简而言之,由于繁琐的填写表格等琐事,签到书使建筑物的安全受到威胁。 纸质日志有罪。 指控3:签到书会激怒您的访客 填写签到簿中的字段非常耗时,并且很容易激怒可能迟到或没有详细信息的访问者。 更糟糕的是,如果您的接待员不在附近,并且访客到达空荡荡的前台,访客将被迫等待或漫步到您的办公室,因为他们不知道该怎么办。 通过iPad使用电子办理登机手续会邀请您的访客同时登录并通知房东,而放在柜台上或柜台后面某处的登录书则不会受到同样的热烈欢迎。 日志给您的访客一种冷淡的,非个人化的欢迎,这使您的访客烦恼。 纸质日志有罪。 指控4:书中的签名歪曲了您的公司 我们认为,您的公司给人的第一印象应该优于手写不良的开放式日志。 在许多情况下,您的访客也是您的潜在客户或品牌大使。 作为一家内心的酒店公司,除了让您的访客在入口处惊叹之外,我们别无其他,您也应该如此。 签署该书是对您的公司以其过时的设计,隐私和安全问题以及其他烦恼来虚假陈述。 纸质日志有罪。 指控5:签到书会使接待员无法胜任工作 最后但并非最不重要的一点是,使用传统日志在访问者上签名的麻烦使您的接待员花费了很多时间,才能真正使您的访问者感到宾至如归。 接待员或前台英雄 (我们更喜欢在Proxyclick上称呼他们)是贵公司的形象负责人(注意:如果您是其中的一员,我们邀请您加入此Facebook群组)。 他们通常是您的访客会见并定义的第一批员工,因此对任何来访的重要客户或公众都有第一印象。 这种责任使接待员的作用变得如此重要。 使用纸质日志意味着接待员与访客的第一次对话围绕着帮助他们填写书籍(例如“如果盒子不够大时该怎么办”)之类,而不是让前台英雄传递令人难忘的访客体验。 纸质日志有罪。 我们认为签署这本书是对所有5项指控的有罪 我们认为,杀死日志是您最好的方法,可以为客人提供应有的访客体验,这是您公司热情招待的真正代表。 为此,我期待继续与我的新Proxyclick队友一起纪念墓碑🙂 […]

转换Ionic应用程序以吸引全球受众的5个步骤指南

支持您的移动应用程序的一种简单方法是支持他们的母语。 Apple强烈建议您为全球受众准备您的应用程序。 本教程介绍了如何翻译Ionic应用程序以支持其他语言。 我最近的“工作时间”更新(版本3.2)包括对其他5种语言的支持。 本教程通过5个简单步骤逐步介绍了如何更新应用程序: 翻译您的应用程序的内容 将Angular Translate模块添加到您的应用中 更新您的模板 更新您的控制器和服务 测试您的翻译 翻译您的应用程序的内容 在更改任何代码之前,我们需要翻译所有应用程序内容。 创建应用程序中所有文本的文本文档。 确保检查所有内容。 以下是一些注意事项: 每个模板的文字 来自每个控制器的文本 每个服务的文字 过滤器返回的文字 App Store说明 App Store关键字 除非您是多语种,否则您需要使用翻译服务将文本转换为您的首选语言。 我过去曾经使用过一个名为“我可以本地化”的网站。 您也可以在Fiverr上找到负担得起的翻译产品。 我建议找到具有翻译移动应用程序经验的翻译人员。 将Angular Translate模块添加到您的应用中 假设您使用Ionic Framework和AngularJS构建了应用程序,则应使用功能强大的翻译服务Angular Translate。 从他们的仓库中下载最新版本,解压缩文件,然后将angular-translate.min.js文件移动到项目js文件夹中。 然后只需将脚本嵌入到www/index.html文件中,如下所示: 确保将模块作为依赖项注入到您的应用程序中。 这是工作时间的节选: angular.module(‘hoursworked’, [‘pascalprecht.translate’]) 然后使用$translateProvider向应用程序介绍您的$translateProvider 。 以下是工作时间示例: $translateProvider.translations(‘en’, { start_label: “Start Time”, end_label: “End Time” }); $translateProvider.translations(‘es’, { start_label: “Principio”, […]

通过教程更新的非官方watchOS-第5章:选择器

非官方watchOS通过教程更新主页 入门 代码杀手 选择器显示样式 p。 106 Series 4手表默认启用了触觉反馈。 我不会添加将其禁用到项目的代码,因为默认行为很棒。 但这是一个示例: 覆盖func awake(withContext context:Any?){ super.awake(withContext:context) self.crownSequencer.isHapticFeedbackEnabled = false } 有关更多详细信息,请参阅Apple的WKCrownSequencer文档。 清单样式 堆叠式 序列样式 您的第一个选择器 p。 109这是我的代码编辑版本。 我避免魔术数字。 覆盖func awake(withContext context:Any?){ super.awake(withContext:上下文) // 1 var weightItems:[WKPickerItem] = [] 为我在Constants.Weight.minOunces … Constants.Weight.maxOunces中 { // 2 让item = WKPickerItem() item.title =字符串(i) weightItems.append(item) } // 3 weightPicker.setItems(weightItems) // 4 weightPicker.setSelectedItemIndex(盎司-1) […]

通过教程更新的非官方watchOS-第3章:体系结构

非官方watchOS通过教程更新主页 探索手表 操作系统 相互作用 p。 62 Series 4 Apple Watch的数字表冠具有触觉反馈 ,可提供更直观的用户体验。 有关如何禁用它的信息,请参见第5章:选择器-选择器显示样式和第7章:表-入门。 手表展示 p。 63 Apple Watch Series 4具有两个新的显示屏尺寸:40和44 mm。 要了解有关它们的所有信息,请观看“ Designing for Apple Watch Series 4”技术讲座和/或阅读文章“支持多种屏幕尺寸”。 3系列42毫米和40毫米系列的手表尺寸相似。 要定位所有四个尺寸,请定位40/42毫米,并确保显示屏缩小至38毫米和最大44毫米。 Series 4手表的边缘呈圆形,因此watchOS 5提供了内容安全区域插图和最小的布局边距 ,类似于iPhone X系列的安全区域 。 使用“ 固定到屏幕边缘”属性可以使用全屏。 Watch OS现在可以使用可缩放的PDF资源。 2x PDF资源将在以下4种屏幕尺寸中缩放: 介绍WatchKit 这是什么 那不是什么 WatchKit应用 由于现在有4种不同尺寸的手表可供选择,因此Apple彻底改造了watchOS图标集 。 这是新清单。 请注意,所有图标都是正方形 ,因此40px x 40px我将简单地写为40px 。 对于Sketch和Photoshop模板,请查看Apple设计资源。 苹果手表通知中心 […]

迁移到Swift统一日志版

创建者: Jared Sinclair 考虑将您的iOS或macOS应用程序从一堆NSLog或print语句迁移到新的(ish)统一日志记录系统? 继续阅读一些可能会让您感到惊讶的事实和花絮,以及一些有关如何充分利用过渡的建议。 如果不确定为什么要使用统一日志记录,则可以快速了解一些主要优点: 这是新标准。 统一日志记录系统是多年来在Apple平台上登录的最大变化。 它具有苹果公司打算作为未来日志记录方式的所有迹象。 在不牺牲日志覆盖率的情况下提高应用程序的性能。 新的日志记录系统从头开始设计,以限制日志记录传统上对生产代码产生的观察者影响。 您现在可以同时使用两种方式:全面的日志覆盖和出色的性能。 升级调试工作流程。 可以使用自定义的子系统和类别来“标记”使用新API记录的消息,这些子系统和类别使Console.app能够使用富有表现力的搜索过滤器来显示或隐藏消息。 在调试跨越多个模块或过程的复杂问题时,这可以节省大量时间。 我可以继续讲其他好处,但是随着我们探索统一日志记录及其替代之间的区别,这些好处将变得显而易见。 统一日志记录与传统日志记录技术不同的四种方法 以下不是统一日志的新增功能或不同功能的详尽列表,而是一些关键差异,这些差异可能会对您从旧式日志记录功能迁移的方式产生巨大影响。 1:OSLog不是功能。 这是一种数据类型。 有时您会听到人们通俗地将统一日志称为“ oh-ess-log”,这可能会使您OSLog对OSLog函数的Foundation文档的OSLog 。 没有一个。 NSLog的真正类似物是中定义的各种函数,例如os_log ,其中大多数都将os_log_t (也称为通过Swift覆盖的OSLog )作为参数。 OSLog类型用于关联相关消息,以便它们可以参与Console.app的搜索和过滤器功能。 2:Console.app是强制性的。[¹] 统一日志记录不会以纯文本或人类可读文件格式序列化日志消息。 相反,所有消息均以不透明的数据格式写入磁盘,只能通过在Console.app中打开日志归档文件(请参阅下面的获取方法)来读取。 Console.app可以解压缩存档的消息,以易于搜索和过滤的方式显示它们。 数据格式的不透明性与您可能熟悉的日志记录系统有很大的不同。 它是由Apple采取的,旨在限制传统上记录对性能和磁盘空间的有害影响。 3:在Swift中,您只能将StaticString作为日志消息传递。 以下Swift代码将无法编译: 这是因为Swift编译器将原本不受限制的字符串文字的隐式类型解析为String ,但是os_log函数需要一个StaticString 。 您可以通过为变量指定显式类型来解决此问题: 或通过消除变量: 静态字符串字符串也可以是C样式的格式字符串: 请注意,在记录消息时不能使用Swift的愉快的字符串插值: 将您的Swift代码从NSLog迁移到统一日志记录时,这可能是您遇到的最重大的偏离。 在用os_log调用替换每个NSLog或print调用的方式时,请做好git工作目录中的准备工作, os_log 。 可以记录String ,但只能作为静态格式字符串的参数来记录: 这种解决方法会带来很大的麻烦,我们将在接下来看到。 4:除非有例外,否则格式参数将为。 默认情况下,当您将String记录为格式参数时: 该消息将在Console.app中呈现为: 处理消息MyApp什么是? […]