Tag: swift

清洁架构:Swift中的网络

我们所有人都在朝着iOS的干净架构迈进,为此,我们一直在尝试许多方法,例如:从MVC迁移到MVVM,以使我们的视图模型独立且易于测试。 诸如Viper和MVVM-C之类的更多模式也已经出现,并被开发人员广泛采用。 在本教程中,我们将看到如何使用Restofire编写干净的网络请求。 Restofire是在Alamofire之上编写的面向协议的网络抽象层, 用于以声明方式使用服务 我们将使用来自apiary.io的Notes API — https://rahulkatariya.docs.apiary.io/ 分解cURL请求 主持人 private-07c21-rahulkatariya.apiary-mock.com 标头 – Content-Type: application/json 路径 – notes 响应 — NoteResponseModel的集合 配置Restofire的最佳位置是在didFinishLaunchingWithOptions内部。 设置主机和标头后,它将应用于我们使用Restofire发出的所有网络请求。 您可以全局提供更多配置,例如请求超时,重试代码,重试间隔,最大重试次数,验证,身份验证等。 默认情况下,所有网络响应的类型都是Data但是我们可以根据需要设置自定义响应序列化器。 对于此演示,我们将通过在应用程序内部添加以下代码段来使用JSONDecodableResponseSerializer 。 通过添加以上代码,我们现在可以将可解码类型用作请求的响应。 让我们为Note响应创建一个可解码的模型。 在Restofire中,每个HTTP请求都是独立的,并由Requestable协议表示,并提供委托方法来处理响应。 委托方法可用于将响应保存在CoreData或Realm或UserDefaults内部,或者您可以执行任何自定义操作。 让我们创建第一个网络请求以获取所有注释。 我们已经在AppDelegate全局配置了host和headers 。 让我们创建NotesGetAllService服务,其path as ” notes ” , response as [NoteResponseModel] 您可能已经注意到,我已经通过侦听响应回调(如下面的代码)在可CoreData内部传递了NSManagedObjectContext ,以将响应结果存储在CoreData中。 现在, NotesGetAllService非常灵活,可以在我们的代码中的任何地方调用,并将响应存储在CoreData中。 在AppDelegate设置CoreData之后,我们现在可以请求获取所有注释。 execute方法是Requestable协议的默认实现,该协议发出请求并调用NotesGetAllService的委托方法。 注意:如果您希望响应也随调用一起传递,则还可以在execute方法内传递完成处理程序。 请求完成后,它将保存在CoreData中的注释列表,并且与FRC绑定的NotesTableViewController将自动显示结果。 可以在此处找到功能齐全的演示,包括本文随附的NotePostService和NoteDeleteService -https://github.com/Restofire/RestofireDemo 快乐网络😎 […]

iOS:Criando Sua Primeira scrollview

iOS版的续集,您可以通过以下命令进行简单的配置。 Trago agora paravocêsum教程com criar sua primeira scrollview de forma quieta eagradável=)。 Crie um novo projeto做技巧单视图应用程序: 塞古达(Es seguida),法语的探求者: Abra o arquivo Main.storyboard: Vamos mudar或tamanho de nossa ViewController。 参数isso,primeiro,ViewController的最大扭矩: 塞古达(Em seguida),没有痛苦的埃斯奎尔多(painel esquerdo),也没有改变 Pronto。 Agora que temos nossa ViewController完全替代,podemos类似滚动。 Arraste uma ScrollView参数集ViewController: 在Seguida上,由于gugues约束,使用ScrollView做ViewController和cololque的方式: Feito isso,vamos colocar uma view dentro de nossa ScrollView。 从景观到景观的看法: 严格意义上的观点与观点:作为约束,没有观点。 SEIS约束。 Primeiro设计了一个ScrollView和coloque estas约束视图: […]

骰子游戏应用

以下gif显示了我创建的Dice游戏应用程序。 允许使用者窥视他们的骰子并打开骰子杯。 您可以和其他朋友一起玩这个游戏。 摇动手机即可获得其他随机数的骰子! 以下是我为此应用程序提供的代码。 // // ViewController.swift // diceApp // //由connieanntan在2019/1/18创建。 //版权所有©2019 connieanntan。 版权所有。 // 导入 UIKit 类 ViewController:UIViewController { @IBOutlet 弱 var diceCover:UIImageView! @IBOutlet var diceImageViews:[UIImageView]! 覆盖 func viewDidLoad(){ 超级 .viewDidLoad() //加载视图后进行其他任何设置,通常是从笔尖进行。 } @IBAction func lookSwitch( _发送者:UISwitch){ 如果 sender.isOn { diceCover.alpha = 0.3 } 其他 { diceCover.alpha = 1 } } @IBAction func […]

使用UIImagePickerController获取图像

在本教程中,我们将做一个应用程序,允许从照片库或相机获取图像。 如果您遵循以下任何步骤,则可以在此处下载完整的源代码项目。 从照片库获取图像 要从照片库或相机获取照片,您需要初始化UIImagePickerController UIImagePickerController 一个视图控制器,用于管理用于拍照,录制电影和从用户的媒体库中选择项目的系统界面。 查看全部 要初始化它,请使用以下代码行: var imagePickerController = UIImagePickerController() 现在,您可以使用以下代码行显示UIImagePickerController: self .present(imagePickerController, animated: true , completion: nil ) 现在运行该应用程序,然后点击照片库按钮,您将看到以下内容: 您可以选择一个图像,UIImagePickerController将消失。 要将图像显示到UIImageView中,您需要执行以下步骤: 使您的视图控制器实现2种协议: UINavigationControllerDelegate和UIImagePickerControllerDelegate UIImagePickerController的集合委托是self: imagePickerController.delegate = self 添加以下两种方法: 就这样。 您可以在此处下载完整的源代码项目。 探索更多: PhotoPicker:使用UIImagePickerController选择图片并拍照

(ч.2)iOSндексШколаМобильнойРазработкиiOS //Вступительные

Витогезадачасводиласьктому,чтобынемногоизменитьготовоерешениеипротестироватьлокально。 Objective-C的最新消息。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 Наэтузадачуушлооколо1.5часовионапрошлатестынаплатформеспервойпопытки。 Началонеплохое) Наследующийденьзнакомыйрассказал,чтоонпростонашелразмеррешетадлячисла1⁰⁶иподставилего。 Врамкахзаданияможнобылоитак。 😉 2.Преобразованиестрок Навходпередаетсястрока。 Необходимоеетрансформировать(сжать),还有затемвывести。 Напримересливход:aaabb77daa8ccc,навыходе:3a2b27d2a83c。 Objective-C中的 Намойвзглядэтосамоепростоезадание 。 ПозжеяузналкаквсеэтоназываетсяWiki。 ,сноваобрадовался,решениепрошловсетестыспервогораза。 Послеэтогояуженемногорасслабился,在к⁰⁰даибылоближе之前。 3.Крестикиинолики Необходимоопределитьисходигрыприидеальнойигрекаждого,еслиизвестентекущийраскладполя。 Такжеизвестно,чтобылосделано1,2или3хода。 Однимходомсчитатьдействиеобоихигроков。 X — O —图库照片#—图库照片。 获胜:X赢了—赢得了O,赢得了O —赢了Draw —赢得了。 Решаяэтузадачуяисписалмноголистовбумаги,поигралвреализациюотGoogle。 Потомискалвозможныеисходыиалгоритмыимнепоказалось,чтоещечуть-чутьиятутиттентер。 Былооколо4ночииярешил,чтоэтузадачулучшепропуститьивернутьсякнейпозже。 // TODO: Вернутьсякэтойзадачепозже Вернулсяяужеближек7утра。 Objective-C中的Голованеработала,ноянакидалпримерныеситуации。 Идеябылавобработкешаблонныхситуаций。 Например,Xвцентре,或OневдиагональнойклеткеприидеальнойигреXпобедит。 Проверкинавозможностьсозданияситуаций,вкоторыхнаследующемходуможнопобедить(вилки)。 Посленесколькихпопытокиисправленийярешил,чтолучшесейчасуженесделаю。 Витогеяненабралмаксимальныйбалпоэтойзадаче。 Возможноэтузадачуможнорешитьиспользуяминимаксилисхожеедереворешений,носходуянемогупридуматькакправильновзвешиватьситуацииприидеальнойигрекаждого。 Есликто-тознает,在комментариях上添加бадурадеслиподелитесь。 😉 4.Графы Навходпередаетсяколичествоточекиребернеориентированнооографа。 Затемперечисляютсяпарыточек—ребра。 Ипослеэтогоидетсписокиндексовребер,которыенеобходимоудалять。 Задачанайтиивывестивсекомпонентысвязностипослекаждогоудаленногоребра。 Ребрамогутповторяться。 Ужеточнонепомнюлимитынаколичествоточек,реберииндексов。 упочтиуверен,чтобольшечем1⁰⁶。 Последнийразяработалсграфамив2012году,когдазанималсясозданиемприложениядляпроектирова。 Послереализации,оченьинтереснобылопросторазбиватьбольшиеквартирынамножествокомнат。 Длярешениязадачияпосмотрелкакискатькомпонентысвязности,нашелпримерыреализициипримен。 […]

Firebase认证の基本的な使い方

Firebase身份验证を使いこなすと,かなり楽に高品质な认证プロセスを组めるので,绍介します。 Firebase身份验证| 火力基地 要将用户登录到您的应用程序,您首先需要从该用户获取身份验证凭据。 这些凭证可以是用户… firebase.google.com 主,iOSアプリ・自前APIにーバーのーの组の合プ替换ですが,それ以外の构成とする场合の参考の。 1.クライアントでFirebase认证の代币取得 认证方法は,以下に対応しています。 谷歌 脸书 推特 的GitHub ルール 电话番号 baseール认证では确认メール送信,电话番号认证は认证ド発ード発行部分までFirebase侧でやってくれて,すごく良くできています👏 また,匿名认证も対応しているので,アプリをインストール・起动するだけでユーザー操作なしでtoken取得することもできます👏 在iOS上使用Firebase匿名进行身份验证| 火力基地 您可以使用Firebase身份验证来创建并使用临时匿名帐户向Firebase进行身份验证。 这些… firebase.google.com は,上记记法以外的其他认证方法を提供したい场合も,ちょっと頑張ればできます。 使用自定义身份验证系统在iOS上使用Firebase进行身份验证| 火力基地 用户首次登录后,将创建一个新的用户帐户并将其链接到凭据,即该用户… firebase.google.com 以下でInstagramアカウントでの认证に対応するやり方が解说されています。同様のやり方で他のサービス対応もできます。 使用Instagram对您的Firebase用户进行身份验证 Firebase身份验证支持开箱即用的四个联合身份提供者,从而使身份验证超级容易。 firebase.googleblog.com 1、1ユーザーに复数のアカウントの认证を纽づけることもできます。 やり方は以下の检索客户的ID令牌に记にいます。 验证ID令牌| 火力基地 当用户或设备成功登录后,Firebase会创建一个相应的ID令牌,以唯一地标识他们… firebase.google.com また,この令牌は有效期限が1时间なことに注意です(后述の検证过程で有效期限切れかどうかチェックします)。 FIRUser.getIDToken(completion:)メソッドは,期限切れの场合にリフレッシュされたtokenを受け取れる(そうでない场合は保持しているtokenが返るはず)ので,自前で保持せずに挟むのが良いかなと思っています。 检索Firebase身份验证令牌,如果令牌已过期,则可以刷新它。 https://github.com/firebase/firebase-ios-sdk/blob/5430b776ca6fea34d84dab09db39c51b51e551da/Firebase/Auth/Source/Public/FIRUser.h#L263-L271 2. tokenを授权:Bearerヘッヘ入れてAPIリクエスト その令牌を授权:Bearerヘッダに入れるなどして自前APIサーバーにリにックストします。 curl -X“ POST”“ https:// YOUR_API / authenticate” -H“授权:承载YOUR_TOKEN” 3.サーバー侧でその令牌を検证—验证 でーバー侧で,以下の使用Firebase Admin […]

了解Objective-C现代化

对于iOS开发人员而言,Objective-C现代化确实非常重要。 它提供了更好的类型安全性,并改善了与Swift代码库的交互。 现有代码库的这种现代化包括但不限于: 可空性注释 用NS_SWIFT_NAME快速重命名 带有NS_SWIFT_UNAVAILABLE限制API 用NS_TYPED_EXTENSIBLE_ENUM / NS_TYPED_ENUM相关的ObjC常量进行分组 这是所有文章的清单 第1部分:可空性注释 第2部分:泛型(下一个版本) 第三部分

iOS –在Swift中解开Segue

글은글은iOS에서取消segue 내용입니다。 iOS에서Push Push Push Push / Present Present Present Present루어진루어진루어진루어진루어진루어진루어진루어진루어진루어진루어진루어진3루어진 1번视图-> 2번视图로 推送 1번查看-> 3번查看当前 2번查看-> 3번查看当前 3번视图-> 1번视图展开 이러한플로우를가지고다。 1个视图,2个视图和3个视图,1个视图和1个视图。 推推弹出式/现在解雇列表두가지 입니다입니다입니다。 3번视图에서1번视图의导航控制器를当前 하지만,이러한사용한다면 View가쌓이게다는문제점 이됩니다。 3번视图에서关闭-> 2번视图에서弹出 렇게가View가쌓이지않은채1번View로돌아오지만 아닐뿐더러리가플로우가아닐뿐더러다합니다합니다。 이않고점을제지가지지않고1번View방법방법이있습니다。 放松Segue的照片。 放松Segue的照片。 1번ViewController动作음다。 @IBAction func unwindVC1(segue:UIStoryboardSegue){} 단순히,코드만다。 2. 展开하는3번ViewController Controller情节提要에서 控制키를, 클릭된ViewController아이콘에서退出으로드래그하면 1번ViewController함수함수다뜹니다。 를segue를클릭해주세요。 解除对Segue가的依赖。 3. wind展开segue사사이드 标识符 해줍니다。 4. 3번ViewController 선언해주면展开Segue구현이완료됩니다。 […]

尝试! 迅捷开催前催トークへの期待を书いてみる(4)

尝试! 斯威夫特东京2019 もうあと数日で尝试! Swiftが开催される时期になりました。少し间を空けてしまいましたが,残りの2日目午后のトークに対する个人的な期待点です。 ↓なお,1日目と2日目の午前について过去に书いたものはこちら (1)1日目午前,(2)1日目午后,(3)2日目午前 実际の発表内容とは全く违うかもしれません。また,スピーカーの方はぼくの期待と内容また全然违っていても気になさらずに予定定りなプレ表をしてください。余计なプレッシャーを与えるのは本意ではありません。 雨燕音の成形 📆3/22 14:30🗣亚当·贝尔 波の合成の计算をSwiftを使うこ纯にするということなんでしょうか。をほ音の分野ですがとんど知らないのですが,このトークで少しは理解が深まるかもしれません。 iOS端末を利用した心理学研究の背景と展望 📆3/22 14:55🗣Yuto Mizutani⚡️🎤 iPad。ようなので楽しみにしています。 SwiftCheckで始める基于属性的测试 📆3/22 15:05🗣son沼佑介 基于属性的测试についてぼくは初耳でしたが,一般的によく使われる特定の値を使ったテスト(基于示例的测试)とは异なり,テストにはこういうテストを书きたくなることはよくあるので,このトークを闻いてぜひモノにしたいです。 关于链接库的所有信息 📆3/22 15:30🗣岸川克己⚡️🎤 静态な框架と动态な框架ってどんなプロコンあったんだっけ?」などと思っていた时に采択LTのスケジュールが公开されたので,それを见て,まさにこれを待っていた!と思ったのでした(そしてこれ闻いてからにしようと思って调查をやめた)。 贤者の弦 📆3/22 15:40🗣迈克尔·伊尔瑟曼 Swift 2,Swift 2まではなんとなくな感じで,Swift 3で正确で厳格なものになって,Swift 4で使い胜手が向上したというイメージですが,そもそもSwift关系なし文字,文字列,というか文字セットと文字エンコーディングがそう简単なものではないんですよね。 その简単でない文字列をSwiftがどう扱おうとしているのか,言语の里に隠れている思想を闻くことができそうなので,これは期待です。思想を理解していれば,コードを読んだり书いたりするときに混乱が少なくなると思うんですよね。 アセンブリ,君ならできる! 📆3/22 16:35🗣安德鲁·马德森(Andrew Madsen) アセンブリ……まで深いところに入っていく话なんですね。iOS开発ではシミュレーター(Intel)と実机(ARM)でアセンブリも异なると思いますが,どんな话がされるのか见当もつきません。とのことなので,このトークを闻いて「我能做到!」になりたいです。 Swiftコンコイラコントリビュートする 📆3/22 17:00 Kit北佑佑⚡️🎤 ぼく本身もSwiftコンパイラに兴味はあるのですが,なかなか実际には手を出せないでいます。コントリビュートまでいかないまでも,このトークを闻いて,少し。はSwiftコンパイラ见てみようかな,ってなれたらいいなと思います。 分,これLTなの?5分!? 核心数据を守るために 📆3/22 17:10🗣唐尼·沃尔斯 核心数据,たしかに嫌われている感はありますね。というぼくも趣味の开発では核心数据を使わずにRealmに逃げた経験があります。核心数据を引起していないぼくからすると,核心数据を利用するこのトークで,Core Dataのハマり场所を回避できるようになれれば,Core Dataを使ってみようと思うかもしれませ,Core Dataのハマり场所を回避できるようになれれば,Core Dataん。 次へつなごう—向下一代Apple开发人员伸出援助之手 📆3/22 17:35🗣井上真由子 […]

编写敏捷测试

使用Quick / Nimble进行更好的iOS测试 我们所有人都希望尽快构建和发布我们的移动应用程序。 但是,它们还需要高质量,稳定并具有用户喜欢的功能。 以下是在iOS应用程序上优先进行测试和使用Nimble可以如何帮助实现这一目标的方法。 为什么测试很重要 当测试花费更多时间时,为什么还要优先考虑编写测试? 软件不再是您可以运送和忘记的物品。 它必须维护并随时随用户需求的变化而发展。 在您的应用中拥有用户后,您需要保持高质量,并确保令人愉悦的用户体验。 使用移动应用程序时,您会额外增加一层复杂性。 连接弱或没有连接时会发生什么? 如何处理不同尺寸的屏幕或微弱的GPS信号? 如果您不考虑这些情况,您的用户将为您找到它们。 手动测试在用户发现问题之前起着重要的作用,但是您不能在每次更改后合理地测试每个功能。 这就是自动化测试的用武之地。 在哪里集中精力 尝试测试应用程序中的每一行都很繁琐,并且收益递减。 有用于检查特定代码段或功能的单元测试,用于查看部分或几个系统如何交互的集成测试以及采用UI测试形式的系统测试。 您首先要建立单元测试的基础。 它们是最快的开发工具,可在失败时准确告诉您问题出在哪里。 专注于在不同领域中使用的代码的核心部分。 实用程序和扩展程序是一个很好的起点。 每当发现错误时,您还希望编写一个测试,以免重新引入它。 没有比引入并必须多次修复的错误更令人沮丧的了。 此外,针对您可能想到的任何特定边缘情况编写测试。 如果您具有当某人刚好达到1000小时(或您测量的时间)时执行操作的功能,请编写涵盖0、999、1000和1001的测试,以确保您在正确的时间返回正确的事物。 敏捷的好处 Nimble是一个匹配器框架,这意味着它可以帮助您比较两个变量。 它取代了XCTest内置的XCTAssert函数,并具有一些重要的好处。 坦率地说,XCTAssertions使用起来很不方便 可读性是用Nimble代替XCTAssertions的最大好处。 Nimble使用了Expect函数,它完全按照您的想法进行操作。 在此示例中,我希望我的变量等于第二个变量,并且可以! 期望(实际)到(等于(预期)) Nimble的另一个重要功能是默认失败消息。 使用XCAssert和Nimble,您都可以编写自己的故障消息,有时还是应该这样做。 但是,您有可能使该消息变得不正确。 一堆自定义消息使代码更难阅读,更新也更慢。 尽管您从XCTAssert中没有任何帮助,但Nimble会显示一条默认消息,告诉您期望值与实际值之间的关系。 Nimble还可以使用toEventually和waitUntil优雅地处理异步代码。 最终,该功能将定期检查并在expect解决或超时时继续运行。 UI测试和等待动画解析时特别方便。 DispatchQueue.main.async { ocean.add(“海豚”) ocean.add(“鲸鱼”) } 期望(海洋)。到最终(包含(“海豚”,“鲸鱼”)) 函数waitUntil允许您等到测试用例完成之前调用完成,从而使您在进行API测试时具有灵活性。 waitUntil {完成 ocean.goFish {成功 […]