Tag: 迅捷

可可豆:依赖管理变得更容易

您需要了解的所有有关豆荚的信息。 什么是CocoaPods “ CocoaPods是Swift / Objective-C项目的依赖项管理器。 它具有成千上万的库,可以帮助您优雅地扩展项目。”通过http://cocoapods.org 本质上,它可以帮助您将第三方库,框架整合到您的产品中,而不必担心如何设置它们和配置项目,这有时可能会很麻烦。 为什么要装豆荚? 为什么不Git? •由于库是第三方的,因此每次有新版本时,您都必须下载并将它们复制到您的项目中吗? 可以说,您的项目中有10个库或框架,现在想象一下您将花费多长时间检查其中是否有任何要更新的新版本? 最糟糕的是,如果某些操作不起作用,您需要还原到以前的版本吗? 这确实需要时间,而且很麻烦,使用CocoaPods只需键入pod update并更新具有可用的较新版本的Pod。 •现在是否要使用某个特定库的v1.1? 快速浏览Git提交历史以找出所需的那一个,这有多容易? 使用CocoaPods,您只需说出Pod’AFrameworkLib’,’1.1′ •每个库都需要使用一组特定的配置来设置您的项目,以使其正常工作,并为10个左右的库完成该工作,然后解决冲突本身就是痛苦。 使用CocoaPods,它会自动得到照顾。 •最后但并非最不重要的一点是,您必须包括所有用于向该库的原始开发者提供功劳的第三方库的许可证。 想像一下要复制10个许可文档并确保它们是最新的? CocoaPod在您的项目中自动创建一个确认文件,您可以在其中适当地添加一个确认文件。 通过 http://stackoverflow.com/questions/22261124/what-is-cocoapods 吊舱如何工作? 依赖关系列在pod文件中。 当触发pod update / install命令时,列出的pod被安装,并且CocoaPods创建一个新的项目文件,即.xcworkspace文件,其中列出了所有pod。 这使它更易于使用,但也减少了错误证明。 如何安装吊舱? 吊舱的安装非常简单,这使吊舱如此流行。 您可以通过4个简单的步骤安装Pod。 安装gems:从终端启动[sudo gem install pods] ,将安装gems。 制作pod文件:使用终端在项目目录中创建一个名为Podfile的文本文件,或者使用cocoa pods应用程序并将Pod添加到您的应用程序中。 搜索要添加的广告连播:在cocoapods.org上搜索要添加的广告连播的名称和版本 在Pod文件中添加Pod和版本:您需要提及在刚创建的Pod文件中添加Pod的依赖性。 可以使用任何编辑器完成此操作(最好使用可可豆荚应用程序 单击安装:触发命令[pod install]或单击可可豆荚应用程序中的安装按钮,将安装提到的依赖项。 做完了 刚开始使用可可豆荚而不是xcodeproj文件创建的工作区。 提及的依赖项已添加到您的项目中。 如何删除已安装的吊舱? 早些时候,从Xcode项目中删除已安装的Pod很麻烦。 仅删除pod文件和目录是不够的。 您需要从构建阶段中删除Pod资源,嵌入式Pod框架和其他一些东西。 但是可可豆的应用使这项工作变得非常容易。 […]

使用CookieCutter Swift创建iOS框架

在iOS中创建框架对我来说并不是什么新鲜事物。 在我的整个职业生涯中,我有机会建立了其中的几个。 您想要创建框架的原因有很多: 创建可以在项目之间重复使用的抽象。 与社区分享您建立的东西。 将项目拆分为模块。 … 直到今天,每当我不得不创建一个iOS框架时,我都会发现自己重复了相同的模板: pod lib创建* 是的 那是赢的正确的cocoapods! 几天前,我收到了有关CookieCutter Swift的朋友建议。 用于创建iOS框架的模板,该模板不仅允许我的项目支持Cocoapods,而且还支持Carthage和Swift Package Manager。 在本文中,我将展示如何使用CookieCutter创建iOS框架以及这样做的好处。 我将在本文中创建的框架可以在这里找到。 检查它是自述文件。 几乎所有内容都来自CookieCutter模板,太棒了! 从头开始真正的生产自述文件,太棒了! thiagolioy / Swifixture Swifixture –用于加载Json文件并帮助进行更好测试的Swift库。 github.com 聊够了..给我看看代码! 首先,请确保每个人都在同一页面上,这意味着: 酿造安装迦太基 酿造安装cookiecutter cookiecutter https://github.com/cookiecutter-swift/FrameworkTemplate *对于将来的运行,您可以将命令缩短为cookiecutter FrameworkTemplate 。 但是,如果要使用最新的模板,则仍应运行上面的完整命令。 运行命令后,您将得到如下所示的文件夹结构: 有很多文件夹和文件: 购物车文件 Podspec PackageSwift 自述文件 Xcode项目 源/和测试/目录 除其他事项外 .. 很棒的事情是,如果您像我一样来自“ pod lib create”世界,能够使用Carthage导入Nimble和Quick是一个很大的增强,而不是测试中更多的语法和完成问题! 使用子规范配置podspec的方式也值得一提。 这种方法将使很多豆荚受益匪浅。 许多图书馆都做到了卓越,例如Moya。 […]

如何使用迦太基安装框架。

我将向您展示如何安装Carthage并为您的项目加载框架,为简单起见,我将以AlamoFire为例。 1.安装迦太基 按照此链接https://github.com/Carthage/Carthage/releases可以像安装其他任何应用程序一样安装pkg文件。 2.完成了吗? 创建一个Cartfile。 我们要安装Alamofire,因此在空白文本文件中编写github “Alamofire/Alamofire” ~> 4.4 ,并将其保存为名称“ Cartfile”,我使用Atom创建此文件。 把它放在你的仓库中。 3.在终端中运行“迦太基更新” 导航到包含cartfile的仓库。 运行“迦太基更新” 等到下载完成。 下载完成后,您将拥有在项目中使用Alamofire的所有必需文件。 4.将必要的文件拖放到您的项目中。 您正在构建一个iOS项目,因此只需要iOS框架。 将框架文件拖放到项目中的嵌入式二进制文件中。 5.你完成了🤙 结论: Carthage是一个简单的依赖项管理器解决方案,它迫使您稍微浏览一下下载文件并找到所需的文件,但是从长远来看,它更简单,因为您不需要在单独的xcworkspace文件中工作,您可以拖动并如果要添加更多框架,请删除新框架。 设置它,然后忘记它。 如果您不喜欢cocoapods,或者对它有不好的经验。 结帐迦太基!

停业:通过比较和推理得出清晰性–巴拉特·纳丹帕利–中等

闭包:通过比较和推理清晰明了… 对于大多数主要的编程语言,闭包已经成为一流的公民。 这是尝试比较不同编程语言中的相似之处。 我们正在使用C,C ++,目标C和Swift编程语言。 在闭包的声明,定义和用法方面查看它们之间的相似之处。 宣言: 大多数闭包语法都源自“ C”中好的旧函数指针 “C” : returnType(* funcPointerName)(参数) C ++ :( lambda函数) [ 捕获 ] ( params ) throw() -> ret { body } objective-c: returnType(^ blockName)(参数) 迅速: {[捕获列表](参数)->返回类型 陈述 } 定义/用途: 实际上,在进行项目时,我们可以有一条规则 ,即@ 转义的任何闭包都必须在其捕获列表中包含[弱自我] 。 注意:-所有以闭包为参数的函数默认情况下均为非转义。 因此,如果您确定在函数返回之前将要调用闭包,则无需使用[弱自我]。 我想在下一篇文章中介绍一个主题。 @转义真的有什么帮助? 就内存管理(又名ARC)而言,编译器优化是什么? 参考文献 : 24.3函数指针和原型 通常,每次调用函数时在作用域中都有函数原型是一个好主意。 功能原型…… www.eskimo.com Swift.org Swift是一种通用的编程语言,使用安全性,性能和软件的现代方法构建而成…… swift.org […]

RxSwift:共享vs重播vs shareReplay

共享订阅:返回的可观察对象共享对源可观察对象的单个基础订阅。 所有这些运算符都是这种情况。 Connectable:返回的observable不会在调用connect()函数之前推送事件。 这允许多个订阅者在发送任何事件之前进行订阅。 参考计数:返回的可观察参考计数其拥有的订户数量。 当订阅者的数量从零变为一时,订阅可观察的源。 当数字从一变为零时,退订并配置可观察的源。 注意: 每当订户数量为零到一时,基础可观察项将被重新订阅。 但是,一次可观察到的源订阅永远不会超过一个,并且所有并发订阅者将共享对可观察到的源的同一订阅。 如果基础可观察对象完成或发送错误,则可能不会重新订阅基础可观察对象。 我建议避免使用此灰色区域,可以通过确保在参考计数降至零后不再有其他订户来完成此操作。 重播事件:操作员将从可观察到的订阅源重播事件,这些订户在发送这些事件后会看到。 对于replay(bufferSize)和shareReplay(bufferSize) ,事件数最多为bufferSize 。 对于shareReplayLatestWhileConnected() ,最多重播一个事件。 当订户的参考计数下降到零时,将清除重播缓冲区。 因此,导致引用计数从零增加到1的订户不会重播事件。 如果有主题,也可以使用multicast运算符。 但是,此处描述的运算符是最受欢迎的,并且最可能对大多数应用程序有用。

我如何使用5台iDevice弹钢琴(MultipeerConnection框架)

iOS开发人员使用Multipeer Connection框架来创建多种设备体验,例如多人游戏。 该框架基于bonjour协议构建,在iOS 7中实现并在WWDC 2013上展示,尽管多年来失去了光芒,但MPC仍然是一个了不起的工具。 本文旨在为您提供Multipeer Connection框架应用程序的简单实现:使用多个设备弹钢琴。 所以,走吧! 该项目可以从GitHub下载: leodegeus7 / MultipeerKeyboard MultipeerKeyboard —一个iOS Multipeer连接键盘。 github.com 目录: iOS Multipeer Connection如何工作? 如何在设备之间传递信息? 如何实现多对等连接? 如何用MPConnection创建钢琴? iOS Multipeer Connection如何工作? Multipeer Connectivity框架使用设备无线功能来检测运行相同框架的附近设备,从而使小工具之间的通信成为可能。 因此,它使用Wifi和蓝牙在iPad和iPhone之间交换信息,以创建多人游戏应用或给人留下深刻印象。 如何在设备之间传递信息? 要在两台设备之间传递信息,您的应用需要建立一个对等会话进行通信。 为了阐明这种连接是如何工作的,请想象以下情况:两个需要互相交谈的人,Marco和Alex。 Marco打电话给他周围的每个人。 亚历克斯正在寻找附近的人聊天。 当Alex听到Marco打电话时,他以连接请求答复Marco。 Marco可以接受或拒绝Alex的请求。 如果Marco接受了请求,则将在它们之间创建一个“梨对梨”的会话,现在,他们可以双方交谈了。 超级容易! 为了加点I并与T交叉,我们将广告称为Marco,将广告称为Browser。 因此,现在我们可以了解Multipeer Connection操作。 如何实现多对等连接? 要实现多对等连接,我们需要使用三个委托:MCNearbyServiceBrowserDelegate,MCNearbyServiceAdvertiserDelegate和MCSessionDelegate。 如果您阅读了上一个会话,则可以猜测每个代表可以做什么。 因此,使用Xcode创建一个类并导入MultipeerConnectivity框架。 要管理会话和对等方,我们需要实例化一些变量,例如会话,peerId(设备标识),保留广告商的服务和保留浏览器的服务。 最后,我们需要实现代表: MCNearbyServiceBrowserDelegate 使用此委托,您可以看到MultiConnection服务在其他设备中进行搜索。 当框架找到其他设备时,它将自动邀请对等方进行连接。 我建议您创建班级的扩展以使事情井井有条: MCNearbyServiceAdvertiserDelegate 使用MCNearbyServiceAdvertiserDelegate可以接受来自浏览器的邀请。 为了使事情井井有条,我创建了一个梨子数组,每个新梨子都附加到梨子数组中。 以下代码中最重要的一行是InvitationHandler(true,self.session),通过此行,您可以创建逻辑来选择广告客户是否要接受或拒绝来自浏览器的邀请。 […]

无限滚动

轮播常常被应用在很多不同的地方,最常看到的就是热门新闻,热门商品之类的。但如果滑到底的时候怎么办?通常都会从第一个重新开始,那下面就开始介绍使用滚动查看设计出来的无限轮播。 在这边我使用一个UIView包含着UIScrollView,UIScrollView包含着两个UIImageView: 上面介绍的无限轮播只是一种比较简单的方式,当然还有很多种不同的方式可以做出相同的功能,像是collectionView也有方法能够做出来,从而要请各位多多研究,如果有错误或问题,可以留言让大家一起讨论! Nibelheim11 / InfinitScroll 通过在GitHub上创建一个帐户为InfinitScroll开发做出贡献。 github.com

如何在iOS上使用CocoaPods?

CocoaPods 图书馆和图书馆 iOS , macOS , watchOS , tvOS和Swift Swift以及Objective-C图书馆和公共图书馆CocoaPods图书馆和公共图书馆 如何在CocoaPods上使用Library? 安装CocoaPods coริ่มแรกเลยเราต้องลงCocoaPodsสะก่อนด้วยการเปิดTerminalขึ้นมาและพิมพ์คำสั่งตามด้านล่างนี้ $ sudo gem install cocoapods จากนั้นทดลองใช้งานโดยพิมพ์ว่า $ pod –version **ถ้าก่อนหน้านี้เคยลงCocoaPodsมาก่อนและต้องการลงใหม่ก็สามารถลบCocoaPodsด้วยคำสั่ง $ sudo gem卸载cocoapods **และเราสามารถเลือกลงเวอร์ชันCocoaPodsได้ด้วยคำสั่ง $ sudo gem install cocoapods –v1.2.1 2.使用CocoaPods设置iOS项目 งร้างiOS项目ขึ้นมาเมื่อสร้างเสร็จแล้วกดปิดProjectจากนั้นเปิดTerminalขึ้นมาแล้วเข้าไปยังiOS Projectของเราจากนั้นเราจะInitial CocoaPodsด้วยคำสั่ง $ pod init InitialอInitial CocoaPodsแล้วจะมีPodfileขึ้นมาดังรูป Podfileนี้จะเป็นตัวที่ระบุถึงLibraryต่างๆราจะเอาเข้ามาใช้บนProjectของเราพร้อมระบุLibrary versionต่างๆอีกด้วย 3.从CocoaPods安装库 Libraryย​​การหา图书馆ต่างๆากhttps://cocoapods.orgตัวอย่างเช่น Libraryอเราเริ่มค้นหา图书馆ที่อยู่บนCocoaPodsนั้นคำถามลำดับต้นๆนที่ผุดขึ้าเลยคือเราจะเลือกใช้Libraryตัวไหนดีเพราะมันมีมากมายเหลือเกินเ ที่ากจำนวนที่下载ไปใช้งาน ที่ากจำนวนคนที่安装ไปใช้งาน ดูจากภาษาที่ใช้ในการพัฒนาและเวอร์ชันของภาษา ดูจากวันเวลาที่อัพเดตล่าสุด กได้แล้วให้กดไปที่ากนั้นเมื่อเราเลือกได้แล้วให้กดไปที่安装指南ที่อยู่ด้านขวาล่างมันจะบอกวิธีลงLibraryพร้อมบอกเวอกเวอร์ชัน dากนั้นให้เข้าไปที่Podfileที่อรู่ในiOS项目แบ่ง环境ของ项目Devน开发,测试,UAT,产品ตัวอย่างการเขียนบนPodfileมีดังนี้ 平台:ios,“ 10.0” […]

Peter Pan的任务中的通知中心和TableView CRUD

[规格] 利用导航控制器实作2个页面,页面1:显示曾经爱过情人的名字按钮,假设有三个情人(或三只小猪,三部电影)。页面2:显示她(他)的名字,星座,照片。 加入第3个页面。在页面2导航栏的右上角有个“编辑”按钮,点选进入页面3。页面3:使用UIViewController,实作情人的编辑页面,可修改名字和星座。导航栏的右上角有一个完成按钮,点选将返回页面2,并更新页面2的内容。如果从页面2返回页面1,内容也要是修改后的内容。 进阶修改,用tableView完整实作以上功能,并且要可以永久储存并实现CRUD。 [故事板] [备注] 一开始使用程式方式转场,但卡在需要用程式生出必要的bar button,需要再练习。 后来改用segue方式拉,发现自己将线拉到viewcontroller而不是导航控制器上,导致xcode产生警告,要牢记。(图1) 开启相簿以及图片CRUD方式还不熟练,尚未加到程式内,要再加强。 通知传送与接收的关系混乱时,最好还是画个示意图。(图2) viewcontroller的生命周期很难想像,就让每个阶段都印个日志,方便厘清viewcontroller的先后顺序,此会影响通知接不接得到。(图3) 使用UIImagePickerController添加图像CRUD。 [最后] [GitHub] EmberChen / ac-notification-practice ac-notification-practice –交流期间Peter Pan的任务。 github.com

枚举初始化器以获取乐趣和利润

这是英国的银行假期,所以这是一个短暂的假期。 我在读Matt Mattaglagher的一篇文章(语句,消息和缩减器)时,发现一个枚举上有一个静态函数…… 枚举 { 情况一 情况二 情况三 静态函数数组(_ values:Something …)-> [Something] {返回值} } 疯狂的简单-它使用可变参数函数获取多个枚举值,并返回这些值的数组(在可变函数中,值表示为数组,因此只返回该数组)。 是的,所以……您为什么要使用它? 毕竟,使用类型推断可以非常清晰地创建一个枚举值数组: let stuff0 = Something.array(.one,.one,.two,.one,.three) // vs 让stuff1:[某物] = [.one,.one,.two,.one,.three] 答案来自于您想要直接使用例如map或forEach链接值的情况 。 stuff0.forEach {print($ 0)} stuff1.forEach {print($ 0)} 这些当然很好,但是如果我们要删除初始变量并实例化数组并立即使用它,该怎么办。 Array ([[。one,.one,.two,.one,.three]) .forEach {print($ 0)} // 要么 [某事]([。one,.one,.two,.one,.three]) .forEach {print($ 0)} www! 对我来说,这里的可读性确实很不好。 如何使用可变参数函数版本? Something.array(.one,.one,.two,.one,.three) .forEach {print($ 0)} 好多了,我想您会同意的。 我喜欢这样的东西,其中一个微小的小功能可能会对我们代码的可读性产生真正的影响。