Tag: 代码

Cara integrasi React Native Dengan Swift Dan CodePush(Panduan lengkap)-包。 2

Seteleh lama gak nulis di beberapa minggu terakhir karena aktivitas yang padat😌,akhirnya kali ini gua sempetin lanjutan dari artikel sebelumnya。 Ini bakalan singkat dan ga bertele-tele,cukup singkat karna sisanya cuma cara积分密码推送文件Swift kita。 安装Codepush Kita Pakai react-native-code-push yarn add react-native-code-push 喀麦店林克项目计划,印度塞拉利昂共和国 react-native link react-native-code-push Perintah tersebut akan menambahkan文件文件yang dibutuhkan secara otomatis。 dani untuk memastikan lagi,bisa kita […]

Swift服务器端

Partiamo dall’inizio… 2014年 苹果公司在世界范围内的通用计算机世界大会上(Apple C)的目标是完成语言程序(目标C)实用程序的使用,并在每个操作系统上都使用了Mac OS,Mac OS, watchOS)。 Il scelto per il nuovo linguaggioèSWIFT(dall’inglese“ rondine”,“ rapido”)。 快速达成共识, 迅速达成目标,在目标C的客观C行为中使用未成年人的犯罪行为。 可能因语言问题而无法使用Apple Consiglia的问题。 Swiftpuòben definirsi il risultato di una attenta selezione darwiniana (in cui l’uomo recita la parte della natura)cheèavvenuta negli anni nel campo informatico dei linguaggi di programmazione。 环境问题的复杂性,法律法规的统一性,通用汇编的通用性,机械化性,社会责任性和经济性程序语言的现代性。 迅速在马塞拉俱乐部的“ rapida”和dirompente俱乐部工作,并且在“锈”,“ Haskell”,“ Ruby,Python,C#,CLU [2] 达尔文语录中的自动翻译和加注时间(按问答集进行统计)和预选书翻译,[1] 更少的代码 可以迅速地从法律法规和法律法规中获得自然权益。 […]

使用委托模式在控制器之间进行通信。

降低应用程序复杂性的一种好方法是委托模式。 这个想法非常简单:您无需在当前上下文中包含某些行为的代码,只需向上下文提供一个委托对象,然后由该委托对象的方法执行操作。 这与继承之上的构成保持一致:您的代码避免了超类及其子类之间的紧密耦合。 通过避免继承,您的代码可以更容忍修改。 通过使代码更具模块化,您可以避免处理过多职责的大型对象,从而使维护变得更容易。 这是一个简单的例子: 协议音箱{ 函数speak(); } 猫类{ 共鸣箱人声和弦 函数meow(){ vocalChords.speak() } } KittyVocalChords类实现了Soundbox { 函数speak(){ printToTerminal(“喵”) } } 猫玛丽亚= Cat.new() catVocalChords = KittyVocalChords.new() marya.vocalChords = catVocalChords 猫需要知道如何喵喵叫,但是猫可能还有其他不需要注意的行为。 将它们保持为单独的对象可以使您的声乐班级完成它的声乐事务,而猫则将其完成猫的事务。 您可以将所有这些信息转储到cat类中,但这会使cat类变得更加复杂,因此更加难以阅读和推理。 另一个选择是使用所需的方法定义基类,这将降低复杂性,但是现在您已经与该基类绑定不健康。 对基类所做的任何更改都会影响继承者。 例如,如果您希望狗类也继承定义语音行为的同一基类,该怎么办? 那计算机课呢? 除此之外,更改行为就像更改委托一样简单: 如果environment.dominate_gas ==氦{ marya.vocalChords = sweakyKittyVocalChords } else,如果environment.dominate_gas == NITROGEN { marya.vocalChords = normalKittyVocalChords } 我们唯一需要担心的是代表。 猫类从来不需要为在不同气体中的行为而烦恼。 因此,撇开人为的例子,这在iOS开发中具有价值。 在我正在开发的健身应用中,我使用容器视图。 […]

屏幕快照de uma ScrollView no iOS(Swift)

Opróximodesafioestásemper virando esquina de nossas vidas e um dos desafios bacanas que tenho para passar dessa vezéfazer um print do content completo de uma scrollview 。 可以在UIImage中进行滚动转换。 Vejamos o passo-a-passo eocódigocompleto。 UIScrollView的重要uma 扩展, 从 toImage到 ui UIImage ; 使用UIGraphicsBeginImageContext com contentSize; Armazenar: contentOffset,frame,showsVerticalScrollIndicator和showVerticalScrollIndicator 。 阿西姆·波德莫斯(Assim Podemos Retornar)认为自己不动产。 Colocar showsVerticalScrollIndicator和showHorizo​​ntalScrollIndicator参数为 false。 Nãoqueremos滚动显示图像; Setar contentOffset参数 CGPoint.zero。 Queremos […]

Google Code Jam为I / O做好心理准备

这是我第一次尝试将Code Jam转换为I / O进行女性编程竞赛。 Google每年都会举办一次代码拥塞挑战赛,这是他们针对女性的第五个年头,专门帮助女性增加在线竞赛空间的多样性和在Google I / O开发者大会上的代表性。 最简单的部分是注册并确定比赛中我将使用的语言。 作为参考,您可以查看解决方案和其他统计信息,包括过去几年中用于提交的最受欢迎的语言。 允许您使用任何编程语言(包括那些不在注册列表中的语言)。 接下来是最困难的部分,这是使我自己为应对挑战做好心理准备,接下来是准备自己的事情。 为了准备,我正在回顾过去几年中的问题。 我研究了一些解决方案,以了解开发人员使用了哪些库以及他们如何解析输入。 我想像这些应该是相同的,而不管问题是什么。 我也在辩论是否使用python或swift。 我熟悉Swift并经常在工作中使用它,但是最近我一直在学习python,它是使用的顶级编程语言之一,对处理大型数据集非常强大。 无论如何,我不想花很多时间来决定,所以我采用了一些性能基准测试,并且我尝试了一些示例挑战以使自己熟悉该过程,从而有可能更成功地竞争。 我用Xcode创建了一个新的命令行项目,并将其重用于解决每个示例挑战集。 命令行项目需要一个main.swift文件,因此我制作了单独的文件夹来包含问题解决方案和示例输入文件。 我的文件夹结构如下所示: 请注意,每个练习都有自己的main.swift和ParseInput.swift文件。 对于当前要解决的当前问题,我在实际的Xcode项目中仅包含一个main.swift文件,以免使Xcode感到困惑。 对于每个挑战,解析输入文件的内容可能非常相似,因此所有可重用的读取方法都可以在ParseInput.swift文件中找到。 在提交过程中,我选择通过标准输入读取示例文件的内容。 因此,我创建了一个小的Shell脚本来尽可能频繁地编译/重新运行我的解决方案。 我的shell脚本如下所示: 要运行脚本,您将传递问题编号和不带文件扩展名的示例输入的名称。 这是一个例子: ./re-run-code-jam.sh 2 B-小型练习 如果您对我如何使用泛型通过标准输入解析行感到好奇,请看以下内容: 在比赛到来之时,我将采取以下步骤解决每个问题: 花一些时间来了解问题。 这个问题往往很罗word,但它为您提供了所需的所有信息。 在编写我的解决方案之前,我经常必须阅读几次问题描述。 正确理解问题将为您节省很多时间。 提出一种解决纸上问题的方法,根据样本输入对其进行测试,然后比较您的解决方案。 如果您认为得到了解决方案,请对其进行编码。 用一小部分问题测试您的解决方案,并修复Xcode中任何明显的错误。 我添加了额外的打印语句,以确保正确读取/或计算内容。 下载大小样本文件,以生成预期的输出。 根据需要重复最后一步。 最后一刻进行清理并提交您的输出和源代码! 祝我好运! 如果您也参加,也祝您好运! 让我们玩得开心。 🙂

我们的健康编码惯例以及它们如何为您提供帮助

在Mobile First,我们以成为快乐的编码员而感到自豪。 在鼓励实验的同时,我们也认识到有时最好遵循我们自己的久经考验的指南以获得最佳结果。 为了保持平台独立性,我们寻求遵循的通用规则,并且不允许自己陷入诸如制表符缩进或语言功能之类的细节中。 我们是快乐的编码员,对我们来说,这意味着…… 复制代码行时,可能是在复制错误(错误),非最佳方法或外部依赖项。 如果有问题的代码分散在您的整个应用程序中,您将无法轻松进行改进。 查看高度重复的代码也将给您带来真正的déjàvu! 始终使代码起作用并注入依赖项/参数。 在创建,理解,测试和错误修复代码时,在一堆中做太多事情是无法管理或维护的。 这就是为什么我们使用单一责任原则。 从功能到对象,甚至到整个应用程序(例如Facebook Messenger),都可以转换为各个级别。 始终将任务分解为更小的简单组件,这些组件只能访问其所需的信息。 不要让人们在您的实现内部获取肮脏的手套! 仅公开已设计并经过测试的要更改的内容。 确保您的实现已通过单元测试针对这些更改进行了测试。 从外部角度查看对象,它的协议有意义吗? 始终使用访问级别的保护,将所有内容设为私有,并在需要时进行升级。 寻找定义明确的协议。 具有全局范围的变量和函数的全局文件(称为“常量”,“助手”或“ utils”)倾向于链接系统的不相关部分,从而使代码难以重用。 单例有相同的问题。 大量使用单例使理解对象依赖性变得很困难-因为您将必须检查实现以查看其使用方式。 由于难以模拟单例依赖关系,因此很难进行单元测试。 始终倾向于依赖注入而不是全局范围和单例。 常量应保存在其所属类的范围内。 这样可以更清楚地了解哪些对象需要运行,从而使代码更易于进行单元测试。 考虑一下对象的生命周期,不要在不需要时不挂对象。 幻数和文字使我们更难理解它们对代码的影响。 它们是非描述性的,并且经常在一个以上的位置需要相同的值,因此,当您要调整该值时,需要在多个位置进行调整……而总是忘记一个位置! 参数化常量/文字,并为元素赋予有意义的名称。 我们编写的所有代码都意识到会被同行评审。 清楚地布置代码,以使其易于阅读,理解和使用描述性名称,以便您的同事可以解密所有内容。 当您在那里时,请先查看自己的拉取请求,然后再添加对等项。 使用源代码管理时不遵循某个过程可能会导致提交未经测试的代码。 它还可能导致提交遗失,进而破坏同级的构建。 遵循 git Flow :使用功能分支,重新设置基础并使用拉取请求。 创建发布分支,仅允许错误修复,并禁止从dev分支进行合并。 一遍又一遍地执行相同的代码会变得很老,因此我们在代码中寻找有用的模式。 如果有人注意到我们面前的一种模式,为什么还要重新发明轮子呢? 将通用代码拆分为可重用的可测试框架。 寻找现有框架,进行审查并做出贡献。 在事后看来,通常会有更好的方法来做某事,我们对此表示欢迎。 我们认为重做组件化代码的各个部分应该是常见的做法。 识别何时该重构。 如果一段代码偏离了其原始意图,那么重构比将其击败来提交要好! 可能只是适当地重命名的情况,但是如果有更好的方法可以将其标记为重构。 重构是件好事,这就是世界的运作方式。 相当于生活圈的编码! …因此,我们认为自己是快乐的编码员。 我们鼓励您尝试一下并创建自己的准则。 […]

高阶功能适用于优雅的高级编码器

(((((()-> {})-> {})-> {})-> {})-> {} 好。 这篇文章有点愚蠢,因为我将使用另一个高阶函数编写一个高阶函数,以便向您展示什么是高阶函数。 我希望我不会犯任何错误。 高阶函数是将函数作为其参数的函数。 好吧,我认为该陈述并不能解释“全部”,但这是我可以向任何非编码者朋友解释的最简单的方法,所以请问。 无论如何,许多编程语言中都存在高阶函数。 我将在本文中使用Swift,但是所有其他语言的概念应该相同。 让我们深入研究。假设我们有一个整数数组。 让数组= [1,2,3,4] 这是将所有元素乘以2的Computer-science-101方法,这是 var newArray = [Int]() 对于0中的i .. <array.count { 让element = array [i] * 2 newArray.append(element) } print(newArray)// [2,4,6,8] 实际上,这里的for循环可以被forEach函数代替,后者是Swift附带的高阶函数。 甜… var newArray = [Int]() array.forEach({ newArray.append($ 0 * 2) }) print(newArray)// [2,4,6,8] 请注意,我们没有将0乘以2。 $ $ 0只是保留的简短形式,表示闭包的第一个参数。 不要问我为什么是$ 0。 […]

PhotoKit的迷你教程

我正在创建一个简短的教程,说明如何从照片库中获取图像并将其显示在故事板上。 这将要求用户许可,然后自动显示图像。 本教程将从库中获取第一张图像并显示它。 我们将使用PhotoKit ,有关更多信息,请阅读Apple指南。 我们首先创建一个名为loadImage的新方法,该方法将返回可选的UIImage 。 我们将使用此方法来抓取图像以显示在屏幕上。 将其设为可选,以防万一我们无法从照片库中获取任何图像。 创建一个用于获取照片资产的管理器对象。 PHImageManager会缓存资产图片,从而使我们重新请求的资产能够更快地加载。 默认方法返回管理器对象。 接下来,创建类型为PHFetchResult的fetchResult 。 此类为我们提供了从Photos fetch方法返回的资产的有序列表。 PHAsset实例表示我们将检索的图像。 fetchAssets方法将检索图像。 选项使我们可以对获取的资产进行过滤和排序,而fetchOptions是接下来要创建的方法。 我们实例化PHFetchOptions类。 此类将使我们能够从获取的资产中过滤,排序和管理结果。 sortDescriptors属性指定获取的对象的顺序。 我们将使用一组键路径和排序顺序来使用NSSortDescriptor数组。 我们将使用creationDate键根据资产的创建日期对资产进行排序。 您可以在此处了解有关关键路径的更多信息。 请求选项方法将返回PHImageRequestOptions 。 我们将使用此方法来影响图像的传递方式。 我们将isSynchronous的布尔值设置为true。 此属性使我们可以设置图像的质量或获取请求的传递速度。 我们返回requestOptions ,我们将在loadImage()方法中使用此方法。 让我们回到我们的loadImage方法并添加以下代码: 我们将创建一个可选图像,并在没有功能的情况下返回该属性。 使用requestImage查找指定的资产。 我们将使用之前创建的fetchResult对象通过使用object(at :)方法来获取特定索引处的资产。 我们还指定了图像尺寸和内容模式,该模式告诉我们如何使图像适合请求尺寸的宽高比。 我们将创建的requestOptions()方法传递给options参数。 这说明了我们的请求将如何处理。 创建一个保护声明,以确保我们的img不为空,否则我们只将图像返回nil。 然后,我们将最终返回我们的形象。 接下来,在情节提要中。 将ImageView添加到View Controller中,然后将插座连接到您的swift文件。 @IBOutlet弱var imageView:UIImageView! 现在,我们将创建一个处理用户权限的photoAuthorization方法。 此方法将检查用户是否向我们授予了访问照片库的权限,如果获得我们的授权,我们将运行其余方法。 如果没有,我们将只打印一份声明。 如果愿意,可以使用UIAlertController提示警报消息。 这会检查我们当前的授权状态。 PHPhotoLibrary对象代表“照片”应用程序管理的整个资产集。 switch语句用于检查我们的状态并确定我们应该做什么。 如果身份验证成功,我们将使用loadImage方法将图像返回到imageView出口。 […]

迅捷网络层-更新

首先,我要对拍手的每个人表示感谢,对我以前的文章发表评论:“在Swift中编写网络层:面向协议的方法”。 经过评论中的反馈和更多研究后,我认为解决本文中建议的改进将是有益的。 我们可以对项目进行两个简单的修改,以改善其功能。 在我们先前的URLSession实现中,我们使用了URLSession.shared 。 此代码有效,但不是最佳方法。 每次发出请求时,我们都会实例化一个新会话。 建议有一个URLSession和多个任务。 以前的实现。要解决此问题,我们将在使用默认配置创建路由器时实例化会话。 您可以使用3种不同类型的配置来创建会话。 我建议您从Raywenderlich.com阅读本文。 使用此代码,我们可以创建一个会话并执行多个任务。 这里的另一个优势是,我们可以调整路由器初始化代码以具有会话参数,通过使用模拟,我们将使编写测试变得更加容易。 为此,我要感谢Koen Punt和ilya stroganov的评论。 我不知道URLQueryItem已经编码了我们的参数。 这是一个快速更新,只需删除 .addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)。 并做了。 我永远不会表现出我所了解的一切。 我在Medium上写作时正在学习所有这些内容。 有时候,我会引用自己的帖子来提醒如何实现目标。 具有终身学习者的态度将使人成长。 我喜欢分享自己的发现,并希望能在此期间帮助某人。 话虽如此,如果有任何主题,您可能希望我发表评论,请在评论中提及。 再次感谢您的所有👏🏾。 在Swift⚡️中继续学习和思考。

可重用的APIManager-在Swift中为IOS应用程序使用Alamofire和EvReflection

在本文中,我将分享我之前工作过的项目中使用的APIManager。 它是一个单例类,用于管理不同类型的API请求,因此实现将很容易且可重用。 配置 首先,我们需要用于请求和响应类的映射模型才能使用服务。 因此,在APIManager中,使用模型来处理网络请求/响应操作。 您可以在这里找到详细信息。 使用Alamofire和EVReflection自动映射和解析JSON 我经常使用Alamofire进行HTTP联网,这是用Swift编写的流行联网库。 因此,它是… medium.com 另外,我还使用了RouterManager作为APIManager,您可以在这里找到。 使用Swift中的路由器为IOS应用程序更好地路由 在本文中,我将讨论在我正在制作IOS应用程序的项目中使用的其他可重用类。 APIManager使用另一个管理器来处理不同的需求,即AlertManager处理错误警报弹出窗口,而ErrorManager处理错误操作等。因此,在本文中,我省略了有关它们的详细信息。 我将在下一篇文章中分享。 脚步 在/ managers文件夹中设置一个APIManager。 设置您的API方法,方法将请求/响应类作为参数,并使用RouterManager类处理路由以进行操作(.GET,.POST等) 经理 实作 在ViewModel,Presenter等中,可以调用APIManager的方法(例如.getLogin,.postLogin)等。 因此,响应将由APIManager处理,您可以完成自己的任务。 (即将LoggedInState设置为.loggedIn或重定向到其他场景等) 感谢您的阅读。