Tag: Swift编程

Checkear杰克·斯威夫特4

你好! 霍伊赫·佩克尼奥·杰佩罗·德·科梅罗·杰克逊·埃塞俄比亚 Para empezar,应酬在以下方面: 我要对他说,要取消对不列颠哥伦比亚的不信任行为的标签,请先取消标签。 乌斯别克州的埃斯多(Una vez tenemos esto),雅各布·帕萨莫斯(al nos pasamos alcódigo):普纳多·克·纳达(primero que nada),杰克·埃斯塔·杰克·埃斯塔·康帕多蒙德·康普巴莫斯 覆盖func viewDidLoad(){super.viewDidLoad()checkCurrentRoute()NotificationCenter.default.addObserver(self,选择器:#selector(self.audioRouteChangeListener(notification :)),名称:NSNotification.Name.AVAudioSessionRouteChange,对象:nil) } Como vemos,在viewDidLoad tenemos到lalamada上的checkCurrentRoute(ahora pongo el codigo)和asis通知系统,从sempreestéatento到cundo haya un cambio en dentro del key NSNotificaction.Name.AVAudioSessionRouteChanged。 私有函数checkCurrentRoute(){让currentRoute = AVAudioSession.sharedInstance()。currentRoute在currentRoute.outputs中进行描述{如果description.portType == AVAudioSessionPortHeadphones {img_tick.image = UIImage(named:“ tick_yes”))}否则{img_tick.image = UIImage(named:“ tick_no”)}}} 通知书,通知书,通知书,选择书,通知书,通知书 @objc动态私有函数audioRouteChangeListener(notification:NSNotification){让audioRouteChangeReason = notification.userInfo![AVAudioSessionRouteChangeReasonKey]为! UIntswitch audioRouteChangeReason {案例AVAudioSessionRouteChangeReason.newDeviceAvailable.rawValue:DispatchQueue.main.async {self.img_tick.image = UIImage(named:“ tick_yes”)}案例AVAudioSessionRouteChangeReason.oldDeviceUnavailable.rawValue:DispatchQueue.main_tsync […]

3D触控-多点触控手势

▪如何添加预览动作 在这里,我们在“喜欢,评论和删除”项目上执行了“窥视和弹出”操作时添加了3个预览动作。 单击每个预览操作后,您可以为您提供要执行的方法。 覆盖var PreviewActionItems:[UIPreviewActionItem] { let likeAction = UIPreviewAction(title:“ Like”,style:.default){(action,viewController)->在 打印(“你喜欢这张照片”) //您的代码动作 } let commentAction = UIPreviewAction(title:“ Comment”,style:.default){(action,viewController)->在 打印(“发表评论”) //您的代码动作 } 让deleteAction = UIPreviewAction(title:“ Delete”,style:.destructive){(action,viewController)->在 打印(“您删除了照片”) //您的代码动作 } 返回[likeAction,commentAction,deleteAction] } 3D Touch是向您的应用程序添加令人愉悦的功能的好方法。 从GitHub https://github.com/nehasharma1101/3DTouch获取代码。 您如何看待本教程? 希望听到您的反馈。 在以下位置关注我: 推特 | GitHub | 领英

使用Swift对Info.plist文件进行强类型访问

作为Apple的开发人员,随着Swift的出现,我们开始在代码中面临类型安全约束。 从我的角度来看,我一直试图完全采用这种方法,即使这通常意味着要处理UIKit的多个部分,这些部分显然是根据不同的(更动态的)范式创建的。 有时候很容易,有些则更少,但是他们仍然是一个很好的练习,可以跳出框框思考,以使我们的代码更安全,更干净。 最近,我重新面对了一个表面上琐碎的任务。 我将读取应用程序的Info.plist文件中保存的应用程序的配置。 我的Info.plist包含一个名为configuration的附加节点,其中包含多个数据: server_url , environment_name和其他一系列键。 值是动态的,并根据您为启动应用程序而设置的当前模式分配(即$(SERVER_URL)是具有值或取决于配置环境(如TESTING/PRODUCTION )的值的url服务器)。 目的是通过保留数据类型来获取这些值。 最直接的方法是使用Codable协议背后的Codable (本文与Codable ,您可以在此处,此处或此处找到大量文章。 代码非常简单,您只需指定一个Codable结构即可处理您感兴趣的数据,然后为该Plist类分配泛型类型。 在我们的示例数据中,我们可以提供以下结构: 然后: 您可以使用该类本身来读取Info.plist以外的所有其他文件; 只需传递.plist(“otherPListFile”)作为init参数并提供您自己的Codable结构即可。

消息以关闭迅速传递。

大家好,希望大家一切都好。 今天,我将向您展示如何使用闭包进行消息传递。 基本上,我将向您展示如何通过Protocols实现执行自定义行为的替代方法。 我不知道您对闭包有多熟悉,下次我将尝试使用闭包。 现在,对闭包不太熟悉的人可以将其作为更简单的方法或将消息传递作为黑手。 我将尝试使用带有自定义单元格的表格视图示例进行说明。 您可以在下方看到我们要实现的目标。 该视图控制器具有一个表视图,该表视图具有一些名称以及它们前面的一个按钮。 表格视图下方也有一个空白区域。 每次按下按钮,我们都会在此区域执行一项活动。 如您在下面看到的,我们在单击按钮时对名称进行了动画处理。 通常,我们在委托和协议的帮助下执行此操作。 为此,我们必须使用按钮操作方法定义协议。 这样,无需创建自定义协议和委托。 我们需要一个类型为闭包的变量。 你们都在想我在说什么😅。 是的,我们需要一个在其中包含闭包的变量。 见下文 这个名为buttonAction的变量将持有一个不带参数的闭包,并返回void。 我们将其作为可选变量,这样,如果任何一个单元格都没有动作,我们也将能够处理这种情况。 与往常一样,我们将在自定义单元格中为按钮创建IBAction 。 见下文 在表视图的类中,我们将闭包分配给每个单元格的闭包类型对象。 见下文 现在我们已经准备就绪,可以执行了。 但是在此之前,让我解释一下我们实际上在做什么。 在这里,我们正在做一个非常简单的活动来完成我们的任务。 我们正在定义一个变量,它将像通常定义的那样保留一个闭包 。 UILable,UIImage等 我们将为tableView_cellFOrRowAt_IndexPath中的每个单元格在此变量中传递一个可执行的闭包 。 同样,我们设置textLabel和detailTextLabel值。 在单元格类中,我们将发现buttonAction是否分配了闭包。 如果它有一个闭包,那么我们只需要执行那个。 我们已经做到了。 伙计们,这是我在关闭时传递的消息。 就像我一直说的那样,我还在学习,我相信学习与分享 。 您也可以从此链接下载演示项目 。 希望对您有所帮助。 我随时欢迎您提出建议,请至少放下其中一个。 非常感谢。

UITableView与来自API的图像

UITableView是一种以列表方式显示结构化数据的好方法。 与Android不同,iOS在促进开发人员使用UITableView方面做得很好。 当您的应用程序显示来自API调用的数据时,事情的学习曲线确实陡峭。 在这里曲线不会停止变陡。 如果您计划在UITableViewCell中显示图像,它将变得有些棘手。 这正是我们今天要做的。 我们打算做什么? 我不打算深入研究UITableView实现。 我给你创造的自由,可以根据需要设计UITableViewCell并使基本应用程序正常工作。 首先使用虚拟数据和占位符图像测试UITableView始终是一个好主意。 一旦您的UITableView启动并运行了虚拟数据和占位符图像,请从GitHub API获取内容。 您可以通过请求以下URL来获得您的GitHub关注者。 https://api.github.com/users/ / followers API响应将具有许多键值。 我们将限制本帖子的图片和名称。 假设您知道如何进行网络调用和解析响应数据以显示在UITableViewCell上,现在让我们集中讨论您应该面对的两个问题 表格视图滚动很慢。 滚动UITableView时,图像会更改。 用户A的个人资料图片可能与用户B的名字一起出现 问题1:为什么UITableView滞后? 当您尝试在UITableViewCell的UIImageView上呈现图像时,将进行网络调用,该网络调用将从图像url获取图像数据,然后使用响应数据创建图像。 每次创建单元时都会发生这种情况。 假设您有3个UITableViewCells,那么将有3个网络调用来获取每个单元格的图像。 当我们处理更多单元格时,随着UITableView重用单元格,此问题会放大。 我如何摆脱时滞? 为了恢复完美的滚动效果,我们可以使用多任务处理。 我们将在后台获取图像数据,并且在接收到图像数据后,将用从API调用接收到的图像替换占位符图像。 在cellForRowAtIndexPath中, DispatchQueue.global(qos:.background).async { 让url = URL(string:(activeUser?.avatarUrl)!) 让数据=尝试? 数据(contentsOf:url!) 让图像:UIImage = UIImage(data:data!)! DispatchQueue.main.async { self.imageCache.setObject(image,forKey:NSString(string:(activeUser?.login!)!)) cell.imgFollow.image =图片 } } 但是,如果图像数据从未收到怎么办? 这是占位符为您提供帮助的地方。 如果未接收到图像数据,则UITableViewCell将具有占位符图像。 问题2:为什么图像在滚动时会不断变化? 如上所述,每次创建UITableViewCell时都会进行网络调用。 说,您的单元格已创建,图像请求已发出,但是在图像响应完成之前,您滚动到另一个单元格。 tableview不知道数据。 […]

iOS- Swift 4.2 —使用键盘工具栏的箭头按钮,按顺序导航到文本字段。

iOS- Swift 4.2 —使用键盘工具栏的箭头按钮,按顺序导航到文本字段。 下面的TextFieldNavigation类将使用键盘箭头处理文本字段的移动。 2)使用带有六个文本字段的scrollView设计一个视图控制器。 3)在ViewController类中,我们将文本字段链接到TextFieldNavigation类(我们将所有文本字段按顺序存储在数组中,并将其传递给具有数组的TextFieldNavigation类) textFieldNavigator?.textFields = [firstTextfield,secondTextField,thirdTextfield,fourthTextfield,thirdTextfield,thirdTextField] GitHub链接:https://github.com/yugandh/TextFieldNavigationFromKeyboard 结论: 这是帮助您在ViewController中使用多个文本字段的项目中的一种简便方法。

在Swift中避免回调地狱

能够从事最多样化的项目,这使我有机会与几种类型的开发人员和代码库联系。 除了它们的核心差异外,在此过程中对我而言突出的是,成熟度较低的项目将始终面临类似的问题。 也许他们选择了错误的体系结构,或者缺少单元测试导致一个讨厌的bug潜入了生产环境,但是有一个特定的问题总是引起我的注意-回调地狱。 如果不从一开始就进行处理,当在其他回调或条件中链接回调时,这些可怕的花括号金字塔就会使困扰着代码库的问题陷入千篇一律的不可能的代码审阅和遥远的“此方法到底在干什么?”的尖叫。 ”。 私有函数requestNetwork (请求:T,完成时间:(结果->无效)?){ 如果isUserLogged { 做{ 让urlRequest =试试request.toRequest() session.dataTask(with:urlRequest){(数据,响应,错误)在 如果让httpResponse = response为? HTTPURLResponse { 如果acceptedStatuses?.contains(httpResponse.statusCode)!= true { 如果让apiError = errorParser?.possibleError(from:data){ 完成(.failure(错误)) 返回 } } } preprocess(data){(processedData,error)在 如果让错误=错误{ 完成(.failure(错误)) } 如果让加工数据=处理数据{ 做{ 让结果=尝试request.serialize(processedData) 完成(。成功(结果)) } { 完成(.failure(错误)) } }其他{ 完成(.failure(HTTPError.unknown)) } } } } { 完成(.failure(错误)) } }其他{ 完成(.failure(HTTPError.loggedOut)) } } 它们难以阅读,几乎无法审查,但不幸的是,它们非常容易编写,巩固了其作为初级开发人员的祸根的地位。 […]

VIPER 101

Merhaba,buyazıda的她的iOS平台mimilan olan VIPER mimarisini dilimdöndüğünceanlatmayaçalışacağım。 Yazınınhedef kitlesişuşekildedir; OrtamlardaVIPER’ıduymuşama neişeyarar tam emin olamayan,VIPER ile ufak tefek 1-2 projeyapmışamamantığınıtam olarakanlayamamışve yaanladığınıpekiştirmekisteyenkişiler。 Geliştirdiğimiz她的奶奶belirli bir mimariüzerinekurarız。 Seçeceğimizmimarinin kolay entegre edilebilir ve ek ek tigeltitieleelere uyumluolmasınıisteriz。 Aynızamanda kodumuzun okmasbilisolmasınıvearkadaşlarımızagösterdiğimizdehavalıbulmalarınıbekleriz。 Kısacabizyazılımcılarbi mimaridençokşeybekleriz。 在iOS电脑上,您可以下载mimari MVC’dir。 苹果酒,苹果酒,MVC,苹果酒,冰激凌。 ViewController’ınaşırışişmesibuna enbüyükörnektir。

Github的Swift.gitignore解释

Swift.gitignore里面是什么? 在创建Xcode项目时,您放置了一个.gitignore,因为您不希望不必要的干扰出现在提交中。 但是,您不知道要在.gitignore中放入什么内容,因此只需从Github中获取Swift.gitignore,而无需真正了解文件中的每一行意味着什么。 我在做同样的事情,但想了解Xcode中的git,并有信心在Xcode项目中使用git。 github / gitignore 有用的.gitignore模板的集合github.com #Xcode # #gitignore贡献者:记得更新Global / Xcode.gitignore,Objective-C.gitignore和Swift.gitignore ##构建生成 建立/ 衍生数据/ ##各种设置 * .pbxuser !default.pbxuser * .mode1v3 !default.mode1v3 * .mode2v3 !default.mode2v3 * .perspectivev3 !default.perspectivev3 xcuserdata / ##其他 *。移开 * .xcuserstate ## Obj-C / Swift特定 * .hmap * .ipa * .dSYM.zip * .dSYM ##游乐场 timeline.xc时间线 Playground.xcworkspace #Swift软件包管理器 # #如果您要​​避免从Swift Package Manager依赖项中检入源代码,请添加此行。 […]

在Swift-3.0中使用协议……

为什么在Swift中需要协议 ? * Act作为接口 * S规定了一组应实施的行为 *您的班级可以遵守的合同合约 *要求|| 方法要求|| 初始化要求 *被选为代表 *用作类型 如何声明协议? 属性要求是什么意思? *协议conformingType必须提供实例|| 具有特定类型&& name的Type属性。 *这里没有约束,必须存储属性|| 计算类型 * C an指定获取|| 设置属性或同时设置两者。 类型属性: 静态关键字为必填项 方法要求是什么意思? *具体的实例方法和类型方法要通过一致性类型来实现。 变异方法要求 更改方法允许更改该实例的属性值。 初始化程序要求: 注意 :初始化器可以是失败的初始化器 如何将协议用作类型? 协议对委派 有何帮助? 代表团 ? :启用结构||的设计模式 班级分担另一个实例的责任。 协议继承: 协议组成 如何仅在类中限制协议? 可选协议要求