Tag: swift

内容模式| 迅速

Entenda os modos como oconteúdopode ser tratado pela视图。 存在三种内容模式,即:scaleToFill,scaleAspectFit,scaleAspectFill。 致辞,致辞,致谢。 原理上的区别是,视图的比例是正确的。 .scaleToFill(escalar para preencher) Esseéo modopadrão,ele escala oconteúdopara preencher toda的景色,messque que issofaçaconteúdoperderaproporção。 如果需要,可以通过更改内容的纵横比来缩放内容以适合其自身大小的选项。 .scaleAspectFit(escalarproporçãopara ajustar) 可以按比例进行管理,可以从视图中进行预览,可以从视图中进行任何操作。 通过保持纵横比来缩放内容以适合视图大小的选项。 视图边界的所有剩余区域都是透明的。 .scaleAspectFill(escalarproporçãopara preencher) 前面的视图,视图的顶部,视图的顶部,视图的顶部,视图的顶部和底部,视图的顶部和底部。 缩放内容以填充视图大小的选项。 内容的某些部分可能会被裁剪以填充视图的边界。 Outros Modos: 您可以在原始视图中进行操作,也可以在视图中保留视图。

Swift Enum kullanarak daha组织listeleroluşturmak

UITableView 和 UICollectionView kullanırkenfarklısection’larıkurgulamak ve kodlamak她的zamankarmaşıkolmuştur。 您可以通过以下方式获取更多信息:“部分”列表中的“部分”部分,例如“部分”部分。 Buyazımdaswift enum kullanarak bu zorluklar ile engüvenliyoldannasılbaşaçıkabileceğimizdenbahsedeceğim。 Nedenkarmaşıkolsun ki吗? Diyelim ki birüründetayekranıtasarlıyoruz。 Enüstteürünresimlerininbulunduğubölüm,altındafiyat bilgisi,altındailgiliürüniçinkullanıcıaksiyonları,altındaüründetayları,altındabenzeryüylerderken uz Bukadarıyetmezmişgibibazıkullanıcılarabenzerürünlergösterilmesin,bazılarındaise aksiyonlar enüstsıradagözüksüngibi fantastik istekler mevcut。 İstanbulkarmaşıklıkburadabaşlıyor。 请使用UITableView和UICollectionView代表数据源,方法是将列表中的索引添加到索引中。 继续前进,从左到右依次是列表列表,列表列表,列表列表,列表列表,列表列表和列表列表。 Enumartıkdaha yetenekli Enum’lar genellikle kodokunabilirliğiniarttırmak,技巧güvenliğinisağlamakgibigerekçelerilebirçokprogramlama dilindekullanılır。 苹果迅捷的双向灌肠器tanımlamalarınıgeliştirdiveartıkenum’larüzerindebellideğerlertutabilme ve method yazabilmeolanaklarımızmevcut。 可以说是枚举,它的名称是alanyaratılmışoldu。 购买UITableView和UICollectionView列表中的列表。 哈迪·巴斯拉勒姆(HadiBaşlayalım) Mademöyle,类似的商店,您可以在此预订。 Benörnekolarak biraraçdetayekranıtasarlamaya karar verdim。 Listeleme双语UITableView kullanacağızve ilk olarak section’lariçinenumoluşturarakbaşlayayabiliriz。 枚举TableSection […]

当存在具有相同名称的全局函数时,请小心Swift Extension

在Swift中实现Object Seam时的问题 要认识的基本问题是,当我们在面向对象的程序中查看调用时,它没有定义实际要执行的方法。 现在,您具有以下代码。 一个类调用全局函数。 现在,您要实现对象接缝。 以下实现将产生完全不同的结果。 B中的扩展是单元测试模块,而A中的扩展是其原始模块。 当您运行它时,在其他模块中实现的Swift扩展在动态调度中将具有较低的优先级。

带FMDB的SQLite

FMDB是Apple为SQLite提供的C样式API的Objective-C包装。 请务必注意,SQLite不是Apple专有技术。 SQLite是Apple,Android,Skype和许多其他客户端和应用程序使用的开源C语言库,可提供强大的数据库引擎。 SQLite预先安装在所有iOS和Android设备上。 它也是iOS上用于Core Data的默认后备存储(尽管您可以选择其他选项)。 在这篇博客文章中,我们将仔细研究SQLite和iOS设备存储。 我们需要做的第一件事是使用Carthage(我的首选方法),CocoaPods或下载存储库来安装FMDB。 我不会在这篇文章中介绍这些步骤,因为它们在其他地方都可以广泛使用。 我将注意到,如果您使用的是迦太基,请将该框架拖到“目标”的“常规”选项卡的“嵌入式二进制文件”部分中。 这会将其添加到“嵌入式二进制文件”和“链接的框架和库”部分。 然后在您的桥接头中导入框架 #import 在某些时候,您可能需要检查实际的SQLite文件。 有几种工具可让您执行此操作,我喜欢使用的一种工具称为“用于SQLite的DB浏览器”。 它是SQLite数据库的可视查看器和编辑器。 您可以添加新条目,执行查询以及浏览数据库表。 我发现此应用程序对于使用Core Data非常有用。 请注意,如果在数据库浏览器中打开了SQLite文件,它将被锁定,因此FMDB事务将失败。 可以使用Homebrew如下安装DB Browser: brew cask install db-browser-for-sqlite 您可以使用终端的find命令find . -name test.sqlite在模拟器中find SQLite文件的位置find . -name test.sqlite find . -name test.sqlite 。 矿山位于以下位置: /Users/user/Library/Developer/CoreSimulator/Devices/89D0C0F5–3842–4E53-A060–8E3D4BDF134E/data/Containers/Data/Application/E37428BB-544C-4A17–9216–1BB3901ED33B/Library/Application Support/test.sqlite 要开始使用FDMB,我们首先需要创建一个SQLite文件。 有关如何执行此操作的基本说明,请参见FMDB存储库上的自述文件。 在此示例中,我们仅打算有一个数据库,但是如果需要,可以有多个数据库。 我只想使用单个数据库,并且由于在多线程环境中使用数据库可能非常危险,因此我选择创建一个单例来访问数据库并进行更新(稍后会详细介绍这种方法的原因)。 我创建了一个类,在访问数据库时充当包装器。 该类将提供基本访问所需的集中访问权限,以调用各种SQL命令。 FMDBDatabase类具有两个主要的静态属性sharedDatabase和sharedQueue 。 这些使调用者可以在需要时访问数据库,并可以使用共享队列来确保执行事务时的线程安全。 该仓库包含有关使用FMDB时线程安全性的部分。 自述文件明确指出:“ 一次从多个线程 使用 […]

成为更好的Swift(iOS)Developer 1.1的技巧

Swift对新程序员很友好。 它是一种工业级质量的编程语言,与脚本语言一样具有表现力和令人愉悦。 这里是成为更好的Swift开发人员的一些技巧。 您可以将代码段复制并粘贴到Playground中,以使其更易于理解- 半开范围运算符(a .. <b)定义了一个范围,范围是从a到b,但不包括b。 半开范围运算符还具有只写有最终值的单面形式。 1.1使用半开范围操作器(或or代码) 让名字= [“维拉特”,“米兰”,“尼克”,“布罗”] 名称中的名称[.. <2] { 打印(名称) } / *打印- 维拉特 米兰* /用于以名称表示的名称[1 .. <3] { 打印(名称) } / *打印- 米兰 缺口 * / 1.2不带半开范围运算符(或💩代码) 让名字= [“维拉特”,“米兰”,“尼克”,“布罗”] for names.enumerated()中的(索引,名称){ 如果索引<2 { 打印(名称) } } / *打印- 维拉特 米兰 */ 或使用while循环(仍为💩代码) 让名字= [“维拉特”,“米兰”,“尼克”,“布罗”] var index = 0 而索引<2 […]

兰巴实验室第二周:发展

上周继续建设。 从星期一开始,我进入了流程状态,只是在Xcode的情节提要中可视化了我的应用程序的整个体系结构。 坚持构建功能,我决定本周只选择与身份验证有关的用户案例。 为了防止功能蔓延,我们决定作为一个团队在应用程序内部不支持Stripe,而仅将其保留为Web功能。 在他们从我正在使用的外部库(Auth0)对登录进行身份验证之后,我协调协调验证该用户是否在我们的数据库中。 我运行了后端的本地实例,并对其进行了严格的测试,因为我不想重置当前正在生产的用户和调查。 我遇到了许多无法预料的问题,例如缺少端点或未正确使用RESTful的端点。 在我的团队成员(主要是CJ和Justin)的帮助下修复了所有这些问题。 总体来说,该团队已经步入正轨,但是后端错误给我们困扰,因为本周应该准备就绪的API端点还没有。 这对我来说是一个主要的障碍,因为在他们准备好之前,我无法真正拉出调查问题或用户的答案。 我跳到其他用户的故事,并意识到该项目的整体成功或失败将作为一个团队,而不是一个人。

iOS:带有CocoaPods的伞框架

本文将教您如何通过CocoaPods分发iOS私有的伞式框架。 目录 1.简介 2.创建具有依赖关系的框架 3.创建一个Pod伞框架 4.分配豆荚 5.集成雨伞盒 介绍 在我以前的项目之一中,我特别需要创建一个包含两个以上框架的框架。 目标是尽可能隐藏这两个子框架的使用。 然后,所有内容都必须作为私有且封闭的Pod发布。 框架不过是一组可以重用的方法和逻辑。 框架是封闭的 ,因此无法读取源代码,只有定义为open或public的方法和类可见并且可以调用。 在Apple开发环境中,一个框架与另一个框架的合并称为“ Umbrella ”。 这种类型的框架旨在隐藏某些子框架的使用,从而促进其使用。 在继续进行此冒险之前,很高兴知道苹果并未正式支持iOS的Umbrella Frameworks,确实引用了官方文档: 不要创建伞框架。 尽管可以使用Xcode创建伞形框架,但是对于大多数开发人员而言,这样做是不必要的,因此不建议这样做。 苹果使用伞形框架掩盖了操作系统中库之间的某些相互依赖关系。 在几乎所有情况下,您都应该可以将代码包含在单个标准框架包中。 或者,如果您的代码具有足够的模块化,则可以创建多个框架,但是在那种情况下,模块之间的依赖关系将是最小的或不存在,因此不应保证为它们创建保护伞。 https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/CreationGuidelines.html“ Apple文档” 遵循本指南,您将创建一个带有CocoaPods依赖项的子框架,这是一个伞形框架,该框架将子框架与CocoaPods的其他依赖项结合在一起。 然后,您将所有内容发布为私有和封闭的pod,最后,我们将所有内容集成到测试项目中。 创建具有依赖关系的框架 第一步,我们创建带有他的依存关系的子框架。 就我而言,这是一个cocoapod供应的框架,因此我不必创建它。 让我们从创建一个新的Cocoa Touch Framework开始 : 下一步是创建跨平台聚合目标 : 聚合目标没有关联的产品,也没有构建规则。 您可以使用构建子框架所需的依赖关系定义Podfile,然后可以执行以下操作: 吊舱安装 对于此示例,Podfile如下: 添加以下代码: 这种结构将使您可以将源除以归档框架所需的项目划分。 当您创建两个podspec时,这将非常有用,一个用于发布供应商的框架,另一个用于发布开放式框架,非常适合测试。 现在到了在项目中创建正确的连接并使所有工作正常进行的时候了。 将Sources文件夹和Subframework.framework添加到项目中。 然后导航到目标伞的“构建阶段设置”,并添加一个“ 新复制文件阶段” 。 确保Subframework.framework出现在以下字段中: 将二进制文件与库链接 复制捆绑包资源 复制文件 ,将目标设置为Frameworks,并使用活动代码签名 […]

小斯威夫特问题

在使用UISearchController的导航栏中实现UISearchBar时,您需要进行以下设置: navigationItem.searchController = searchController 当搜索栏为空时,您可能无法显示结果表视图(例如,您可能希望显示最近的搜索) 您尝试了一切,包括: self.searchController?.searchResultsController?.view.isHidden = false 在UISearchControllerDelegate和UISearchBarDelegate方法中: willPresentSearchController,didPresentSearchController和textDidChange,searchBarTextDidBeginEditing。 但是仍然无法正常工作! 解: 在viewDidAppear中设置searchController.isActive = true 注意:但是,如果要通过以下设置将搜索栏放置在导航项的标题视图中: navigationItem.titleView = searchController.searchBar 你可以设定 在viewWillAppear中的 searchController.isActive = true

如何从RxSwift开始-逐步

在这个简短的教程中,我们将创建一个简单的应用程序,该应用程序将使用Coin Market API来获取所有加密货币的最新报价。 这次的不同之处在于,最重要的部分将使用RxSwift和反应式编程来实现。 完成后,该应用程序将如下所示: 没什么特别的,但true内藏着真正的美。 您可以使用以下链接下载入门项目: 入门项目 如果您在工作中陷入困境,只需看一看托管在我的GitHub帐户上的已完成项目。 的GitHub 为了方便起见,我已经安装了所有依赖项,但是您应该打开podfile来检查将使用的内容: pod’RxSwift’,’〜> 4.0′ pod’RxCocoa’,’〜> 4.0′ pod’SwiftyJSON’ 我想我不需要告诉您有关RxSwift库😆的信息。 我们将使用SwiftyJSON解析服务器对代表应用程序中模型层的对象的响应。 您无需为此烦恼,因为我们只会在一个地方使用它。 对于第二个依赖项,需要简短说明。 RxCocoa基于RxSwift并包含大量有用的API,它们为Apple库中使用的最受欢迎的工具(例如URLSession或UITableView)添加了“反应性”扩展 。 RxCocoa应该自己撰写整篇文章(可能不止一篇),但是这次我们仅使用它来扩展URLSession对象功能。 您可以使用CoinsCap_RxSwift.xcworkspace文件打开您的项目。 编译并在模拟器或物理设备上运行它,以检查是否一切正常。 现在,您的眼睛应该看到类似以下的内容: 目前没有什么特别的事情发生,但是我们会在短时间内对此进行处理。 现在,看一下项目结构。 最重要的文件位于CoinCap文件夹中。 您可以在其中找到两个UIViewControllers对象和代表我们的数据模型的Struct。 现在,我们将处理应用程序中最重要的部分-从远程服务器获取数据。 打开MainViewVC.swift文件。 我们将在getCurrentCoinsCap(fromUrl 🙂函数中编写用于获取加密货币数据的代码。 对于此任务,我们将使用URLSession,因此有关此API的基本知识将非常受欢迎。 但是我们不会使用默认实现。 这次,我们将使用RxCocoa库提供的自定义反应式扩展。 这将使我们编写反应式代码。 稍后您会明白我的意思。 getCurrentCoinsCap(fromUrl :)函数仅采用字符串类型的一个参数,该参数将用于创建硬币市场URL。 首先在函数内添加以下代码: 让响应= Observable.just(url) 您将创建一个Observable对象,该对象仅包含一个元素(因此将其命名为“ just”),该对象将在创建订阅时发出。 这是创建完整URL的起点。 使用作为RxSwift一部分的map函数,我们将创建一个适当的URL对象。 在getCurrentCoinsCap(fromUrl :)函数的末尾添加以下代码: .map {url-> URL in return […]

每个iOS开发人员都应使用的10个开发工具

这是我在Medium上的第一篇博客文章,我想将其专门用于开发工具,这些工具可以节省很多宝贵的时间,从而使我们(至少是我的)生活更加轻松。 对我来说,在项目上工作时最重要的是要提高生产力,并且要实现这一点,我必须找到并使用能够帮助我花更多时间并专注于实际应用功能及其复杂性的工具。 直截了当,这里是我每天使用的工具: JSON Accelerator –一种在Objective C中处理JSON数据的更好方法。当处理JSON并创建各自的模型时,这变得很痛苦。 JSON Accelerator将遵循SOLID原则自动创建模型。 就我个人而言,这是我无法缺少的工具。 它会在不到一秒钟的时间内为所提供的JSON数据生成所需的文件,而不会花费数小时手动创建它们。 不幸的是,它仅支持Objective-C,因此对于Swift,我正在使用SwiftyJSONAccelerator来完成相同的工作。 Prepo –准备,共享和预览App图稿和图标。 拖放图稿以将@ 3x和@ 2x快速转换为@ 1x,并在上下文中预览Icon图稿。 Prepo将所有图稿存储到项目窗口中,以准备批量导出,或将QuickDrop用于@ 3x和@ 2x的超快速大小调整。 您是否曾经从设计师/客户那里收到过一种尺寸不正确且命名错误的资产? 好吧,它经常发生,它们会让您处理其余的事情……该工具可以帮助您解决这种情况,因为它将所有资产转换为所需的大小,并为您正确命名。 它还可以将您的应用程序图标转换为所有所需的大小。 CocoaControls –是一个了不起的网站,您可以在其中找到超过5000个Swift和Objective-C开源GitHub库。 因此,下一次,而不是四处寻找应用程序所需的一些UI组件,只需访问该站点,您将找到所需的一切。 Postman –是一款用于与HTTP API进行交互的Google Chrome应用。 它为您提供了一个友好的GUI,用于构造请求和读取响应。 我的实践是在项目中实现API之前先构建和测试它们。 它拥有超过300万用户。 CocoaPods –是Swift和Objective-C Cocoa项目的依赖项管理器。 它拥有超过32,000个库,并在超过210万个应用程序中使用。 CocoaPods可以帮助您优雅地扩展项目。 我必须在我从事的每个项目中都包含的另一种工具…除了在整个项目中保留外部库并在添加它们之后遇到各种问题之外,您还可以使用CocoaPods以一种优雅的方式解决所有问题,并将所有内容都保存在一个地方一些终端命令行。 JSON Formatter –您是否曾经收到没有格式的JSON响应,而您几乎无法理解其结构? 这就是为什么我开始使用此Google Chrome扩展程序的原因,并且浏览器中的JSON响应不再出现视觉问题。 我建议您也这样做,并且保证您会喜欢自动格式化的回复。 Sympli –与Photoshop,Sketch,Android Studio和Xcode合作的团队的设计移交和实施。 我必须说,对于一个可加快您的UI实施速度的插件而言,这是一个非常有趣的概念。 这就是它的工作原理……创建一个项目,然后设计师从Web版本添加他的文件,然后转到Xcode项目并安装插件,只需按一下按钮,它将在UIViewController和还为组件创建所需的插座。 这个插件没有太多经验,但是我鼓励您尝试一下并分享您的印象。 我还将分享一些未在开发中直接使用的工具,但它们也是重要的一部分: SearchMan –如果您在AppStore上拥有自己的应用程序,并且想跟踪您的关键字排名和应用程序的可见性,则可以使用此免费的ASO工具,该工具将为您提供有关应用程序位置的见解。 […]