Tag: swift

Joodle:Xcode和Swift Notes.1

今年秋天,我正在从事一个名为Joodle的游戏化项目,以使慢跑成为一项有趣的活动。 作为面向慢跑者的移动应用程序, Joodle设计为包括地图视图并跟踪用户的慢跑路线。 我们希望有一个简单的工作原型来更好地测试和演示该想法。 因此,我选择使用Swift和Xcode进行开发。 Xcode对初学者很友好。 当我们团队中的视觉设计师在UI部件上工作时,我实现了线框以贯穿工作流程。 我正在研究的第一部分是地图部分。 遵循Google Maps API网页上的教程之后,CocoaPods随即安装了Google Map SDK。 该教程可以如下所示: 制备 通过终端安装Ruby: $ curl -L https://get.rvm.io | bash -s稳定 $源〜/ .rvm / scripts / rvm $ rvm -v $ rvm install 2.0.0 $ rvm 2.0.0 — default 安装CocoaPods: $ sudo gem install cocoapods CocoaPods指南 CocoaPods依赖项管理器的官方文档站点。 guides.cocoapods.org 安装Google Maps SDK并获取API密钥: 入门指南 适用于iOS的Google […]

使用Swift开发iOS的前提条件

从哪里开始。 Mac + Xcode +终端+ Cocoapods。 注意: 您是否首先阅读了这一重要文章? 从Appstore下载Xcode 您需要在Mac上的某处编写代码,以告诉iPhone / iPad您正在编写应用程序以执行操作,而某处是Xcode(Apple的IDE(集成开发环境))。 Xcode是一套软件开发工具。 基本上,您将获得以下好处: 编写可提供有关您的应用程序操作说明的源代码。 因为像iPhone或iPad这样的机器只能执行对人类没有意义的“低级”机器代码(分别为1和0),所以在其之上存在多种抽象以使其易于理解。 在这种情况下,最高级的是“高级”语言Swift(用于编写您的源代码)。 “构建”您的应用程序:Xcode然后将您的源代码一直转换(编译)为机器代码,以便您的应用程序(程序)可以由设备执行。 借助“断点”(用于暂停程序的执行)和“控制台日志”(用于在程序执行期间显示信息)来调试和查找错误或错误,从而调试代码。 终奌站 在Mac上浏览或启动应用程序时,通常通过图形用户界面进行操作: 单击应用程序图标,在Finder中查找文件夹等。 另一种方法是使用终端,这是一个命令行工具。 您可以使用特定语言直接为Mac输入指令(在这种情况下为Bash)。 要提示终端,请按⌘+空格并输入“ Terminal”,然后按Enter / Return键。 我们将使用它来安装Cocoapods。 椰子足 这是Swift(和Objective-C)应用程序项目的依赖项管理器。 在几乎每个超基础项目中,您都需要安装一些“库/框架”,因为您不想每次都重新发明轮子,而是自己编写应用程序应该做的所有事情。 库和框架基本上是做某些事情的源代码。 这些是开发人员多年来开发的通用功能,这些开发人员将其工作开源并将其用于许多应用程序,例如在iPhone / iPad设备上下载和缓存图片(即存储图片)。 Cocoapods提供了一种干净而简单的方法来管理所有这些“依赖项”(即“库/框架”)。 转到终端并粘贴以下Bash命令sudo gem install cocoapods 。 sudo使您成为“超级用户”,可以调用任何命令:在这里,我们install了名为cocoapods的Ruby gem 。 gem是用Ruby(另一种编程语言)编写的程序。 包起来 打开Xcode并在iOS选项卡中创建一个新的单视图应用程序。 填写产品名称信息,然后选择您的组织名称和标识符。 确保您的组织标识符的格式为“ com.yourorganization.yourproductname”。 Apple通过这种方式将您的应用程序标识为具有唯一的捆绑包ID(在此处有更多信息)的唯一方式(更好地保持连贯性)。 将项目保存在桌面上。 创建项目后,立即关闭Xcode并返回到终端。 输入cd […]

iOS-使用UIScrollView,UITextView和自动版式

我正在为iOS开发,因为iOS 2和iPhone 3G和UI界面是我开发应用程序时最简单的任务之一。 一切都是静态的,所有视图都完全像您将它们放置在XIB中一样。 但是情况发生了变化,iOS 6引入了自动布局,因为iPhone 5比其祖先更高。 对于简单的应用程序来说,这是一个容易克服的问题。 然后推出了iPhone 6和iPhone 6 Plus,那天开始了我的噩梦。 自动布局是唯一的方法,经过数周的练习,我终于开始使用它了(大多数时候)。 在使用自动版式处理大量项目之后,我感到很自信。 直到我尝试将Auto Layout与UIScrollView一起使用时。 使它正常工作是很棘手的,每次我尝试实现它时,我都会通过Google和StackOverflow进行自我搜索。 因此,我决定将本教程写到教程中,并提供确切的步骤,以帮助将来我以及其他在UIScrollView中苦苦挣扎的人。 因此,让我们从一个UIViewController和一个空白的UIView开始。 继续并添加一个UIScrollView。 选择UIScrollView,然后添加以下约束: 这样,UIScrollView将具有与初始UIView相同的大小。 然后在UIScrollView下添加一个新的UIView。 展开新的UIView,使其具有与UIScrollView相同的大小。 从新的UIView Ctrl +拖动到UIScrollView。 然后添加前导空间,尾随空间,顶部空间,底部空间和等宽约束。 如果一切正确,“自动布局”将抱怨UIScrollView的高度。 可以,因为还不知道高度是多少。 现在我们需要添加标签,文本字段,按钮或文本视图,并添加它们的约束,就可以完成了。 在本教程中,我将使用与UIScrollView一起使用时比较棘手的UITextView。 因此,让我们在新的UIView下添加一个UITextView。 调整大小并添加以下约束: 现在,您会注意到,自动版式仍然在抱怨UIScrollView的高度。 这里的问题是,默认情况下,UITextView已检查IB中的“滚动启用” 。 因此,找到该复选框并取消选中它。 在您的UITextView中添加大文本并运行您的项目! 您会注意到,您拥有一个带有UITextView和滚动功能的UIScrollView。 那是困难的部分。 现在继续添加您的控件并制作一些出色的应用程序!

MVVM,您要做一项工作!?

想法💡 在过去的几年中, MVVM在iOS社区中赢得了一定的声誉。 几乎所有其他会议都至少有一个发言。 几乎所有其他博客文章都在谈论设计模式,特别是MVVM(就像这样的:p)。 所有这些表明,它必须非常擅长于其工作。 因此,让我们尝试了解它的实际作用。 动机💪 当我们制作一个iOS(或者您可以说一般而言,任何移动/网络)应用程序时,每个屏幕都具有多个UI组件,例如UIView , UITextField , UILabel , UIImageView等等。这些组件需要自己处理很多工作逻辑。 因此,两者之间紧密耦合的机会很大。 现在耦合不好,因为它 增加了进行UI修改的成本 难以对此类代码进行单元测试 因此,为了使它们分离,我们经常尝试使用一些设计模式来添加一些抽象和模块化 。 这样的模式之一就是MVVM,它是由Microsoft推出的,它代表的当然是Model-View-ViewModel 。 我不会深入研究MVVM的详细信息,因为您一定不厌倦一遍又一遍地阅读它。 相反,我将谈论它所提供的功能以及我们可以在其他地方应用它。 如果您是第一次收听MVVM,那么Microsoft会提供一些非常好的文档,您可以在此处查阅,或者社区中也有很多不错的帖子。 它能做什么? 🤔 MVVM只有一项工作-它只是将表示逻辑与UI分开。 让我们谈谈这种表示逻辑。 每个UI都需要以一种或另一种形式显示一些数据。 现在,由于数据以原始格式保存,因此无法直接显示。 因此,我们需要对其应用一些装饰性方法,以使其可用于UI。 到目前为止,还不错,但是没有人谈论这些数据从何而来。 它可能来自持久层,或者可能是api调用,或者可能两者兼有。 因此,究竟谁负责获取这些数据。 由于ViewModel是用于装饰数据的“唯一”负责人,因此也许我们可以像一些核心数据助手一样将数据获取逻辑也放入其中,或者可能是一些api逻辑。.aa,我们回到起点,从头开始听起来像控制器。 现在是时候退后一步,只将视图模型保留为表示逻辑了。 关键时刻! 😲 因为,当我们研究MVVM(或此类设计模式)时,这个灰色区域(即谁获得数据)的定义不是很好,因此我们最终将此逻辑放入视图模型或控制器中。 因此,产生了大规模控制器或如今的大规模视图模型 。 但是没有人说您不能像提取表示逻辑那样提取数据。 因此,我们还应该从MVVM中学习到的是,我们应该抽象出不同的责任性,并将其置于不同的类别中。 只是MVVM没有谈论数据获取,但是我们可以使用导致MVVM的想法,即每个类都承担单个责任是一件好事。 我们可以通过多种方式实现这一目标,尽管现在我仅使用两种简单的方式进行讨论- concrete classes和protocols 。 例子🛠️ 在第一个示例中,我们将看到如何将Datasource注入到UserListViewModel以便我们可以抽象出将数据提取到单独的类中的逻辑,并使视图模型仅使用它, struct User { […]

使用Urban Airship的iOS推送通知设置

推送通知允许将对客户有用的信息从服务器传送到用户的屏幕,无论该屏幕是在智能手机,平板电脑,计算机还是可穿戴设备上。 在与客户互动方面,使用推送通知有很多好处。 但是,有必要以使客户保持联系而不是烦恼的方式使用推送通知。 在跟踪用户,构建地理围栏等方面,构建我们自己的推送通知服务非常复杂,并且还需要大量时间和精力。 特别是当我们没有对推送通知的后端支持时,我们需要研究市场上已经可用的推送通知服务。 Urban Airship是顶级推送通知服务提供商之一。 它提供了很多选项,包括推送通知,应用程序消息传递,消息中心等。 好吧,让我们看看如何使用Urban Airship将推送通知发送到我们的应用程序。 如何在仪表板中创建城市飞艇项目 步骤1:注册/登录 根据您的要求选择一个计划,并注册Urban Airship帐户。 如果满足您的要求,您也可以从免费的入门计划开始。 如果您已经注册了该帐户,请登录该帐户。 步骤2:新专案 单击新建项目按钮 在右上角。 输入项目名称,图标(可选),类型(实时/测试)和行业类型。 单击创建项目。 步骤3:为您的应用程序设置推送服务 我们需要为我们的应用程序进行APNS设置。 这意味着我们必须获取启用了推送通知服务的证书。 步骤4:专案设定 在仪表板中单击您的项目 单击频道指南,然后选择要从该项目向其发送推送通知的平台以及所有平台。 单击选择文件,然后选择在步骤3中生成的证书。请注意,对于开发项目,我们应该上载开发证书,对于生产项目,我们应该上载生产证书。 单击保存证书。 步骤1:安装Urbal飞艇SDK 我们可以使用CocoaPods,Carthage或手动安装Urban Airship SDK。 使用 CocoaPods 确定已安装可可豆荚后,将“ UrbanAirship-iOS-SDK”添加到豆荚文件中,然后运行“ pod install”命令。 use_frameworks! 目标“您的应用名称” pod’UrbanAirship-iOS-SDK’ 结束 使用 迦太基 安装迦太基。 在包含.xcodeproj或.xcworkspace目录中创建一个.xcworkspace 。 github“ urbanairship / ios-library” 手动安装市区飞艇框架 下载最新版本的Urban Airship […]

如何使用Objective-C模仿Swift:权威指南。

注意:本文的目标是成为现代Typed Objective-C的入门文章。 超过一半的材料和想法是原创的。 对于那些不是,我链接了原始来源。 如果您有好主意或我错过了什么,请通知我。 您的资料将被发布,并被添加为作者。 这一年差不多是2019年。Swift现在是4.2版。 自从用Objective-C编写不再是“流行”并且在会议或聚会上“脱颖而出”甚至是危险的以来已经过去了六年。 但是,那些认识到swift的好处的人应该怎么做,就已经写了一些项目,但是由于某些原因而坚持使用Objective-C(也许是由于次要版本之间ABI不稳定)。 让我们看一下swift的功能,以及我们是否可以尝试“模仿”或超越它的某些功能…… PS:那些达到本文7/8要求的人将获得Dessert,并且肯定会喜欢它! 目录 结构 纯功能 默认接口实现 泛型 抽象方法 最后 铸件 枚举 开关范围: 默认参数 阻止可见性 选装件 甜点 自动打字 类型迭代 复制中 延期 检查密钥路径 Swift有结构,但C也有。但是,直到Xcode 10,他们才不支持ARC for Objective C类型,只支持__unsafe_unretained和自由跳舞 可以救我们 但是自这次WWDC演讲以来,一切都发生了变化:https://developer.apple.com/videos/play/wwdc2018/409/ 那么,我们现在该怎么办? 乍一看似乎不太方便。 如果没有丑陋的循环释放,我们就不能在数组中使用它。 在放入NSArray之前,我们仍然必须转换为NSValue,但是要感谢__attribute __((objc_boxable))的语法更简单。 实际上有大量的实现… 例如,初始化程序。 我相信少数人会与Bob叔叔不同意,函数的最大参数应为3个参数,如果更多,则应努力使用结构。 好吧,在现代C结构出现之前,我们仅限于使用这样的东西。 @interface SomeService -(非空实例类型)initWithBlobData :(非空BlobData * const)blob NS_DESIGNATED_INITIALIZER; @end 而且我们所有丑陋的初始化方法都将迁移到模仿值类型的类: […]

了解Swift闭包语法

尽管我鼓励开发人员为技术面试做准备,主要侧重于解决问题的方法 ,但关闭过程非常复杂,需要仔细研究。 在这个挑战中,我们的目标是创建一个名为operation()的辅助函数,该函数将把times()函数用作参数 。 如下所示,times是一个简单的函数,它返回两个输入参数的乘积: //挑战:编写一个名为operation()的新函数,该函数将times()函数用作参数。 功能 次(lhs: 整数 ,rhs: 整数 )-> 整数 { 返回lhs * rhs } 一流 成功解决此挑战需要了解Swift语法。 首先,我们应该认识到特定对象(例如枚举 , 协议和功能 )通常是与其他语言一起使用时受到限制的,它们是一等公民 在Swift中。 因此,Swift允许我们像使用标准Int或String类型一样使用它们。 由于函数可以包含参数和返回类型,因此这使得将它们表示为Closures较为详细。 考虑以下: 功能 次(lhs: 整数 ,rhs: 整数 )-> 整数 { 返回lhs * rhs } 功能 操作 (公式:( 整数 , 整数 )-> 整数 ){ 让 结果=公式(2,3) print(result)//打印6 } //时间用作参数。 操作(公式: […]

Swift中的JSON之战(Object Mapper vs Codable)

映射: 映射是一种操作,其中给定集合(域)的每个元素与第二个集合(范围)的一个或多个元素相关联。 在Swift中进行映射: 通常,当应用程序与外部API甚至有时与本地静态数据进行交互时,我们实际上会处理不同的数据类型,例如JSON或plist,或者有时甚至是其他一些格式。 我们需要使用JSON数据映射模型类对象,以便我们可以对业务流程进行建模。 在Swift中,我们具有以下用于解析和映射JSON与我们的模型对象的公共库: – JSON序列化 – Swifty JSON –可编码 – ObjectMapper 在本文中,我们将学习Swift中两个最常见的解析和映射库,并将分析两者之间的区别。 对象映射器: ObjectMapper是一个框架,可以将JSON转换为对象(反之亦然)。 使用ObjectMapper之类的库,可以更轻松,快速地实现JSON的解析和映射。 为了使用ObjectMapper,我们需要实现Mappable协议: 公共协议BaseMappable { 变异功能映射(map:Map){ } 公共协议可映射:BaseMappable { 初始化?(地图:地图) } 对于使用ObjectMapper: 1.我们的对象需要从Mappable扩展 2.我们的对象需要实现映射功能,在其中我们将指定JSON的哪些属性分配给该对象的哪些属性。 3.必须将属性声明为可选变量 可编码: Codable是Swift4标准库中引入的协议。 它提供三种类型: 可编码协议:用于编码。 可解码协议:用于解码。 可编码协议:用于编码和解码。 typealias可编码=可编码和可解码 使用Codable: 1.要对自定义类型进行编码和解码,需要采用可编码协议。 2.自定义类型必须具有可编码类型属性。 3.可编码类型包括Int,Double,String,URL,Data等数据类型。 4.如果其他属性(例如数组,字典)由可编码类型组成,则可进行编码。 ObjectMapper和Codable之间的区别 对象映射器 这是第三方框架。 对象映射器具有类型转换支持。 据说Object Mapper比Codable快。 (或者比JSONEncoder / Decoder更精确) 不保证将ObjectMapper与新的Swift版本一起使用进行更新。 在您的项目中添加额外的依赖关系。 ObjectMapper是进一步继承自BaseMappable协议的协议。 […]

iOS中的反应式编程?

React Native!=反应式编程 หลายๆคนเห็นแล้วอาจจะสับสนเข้าใจผิดว่ามันคือตัวเดียวกันจริงๆมันแค่ชื่อคล้ายกันเฉยๆนะ React Native本地 JavaScript代码库本地Facebook社区2013本地库开发人员Applicationาสารถพัฒนา应用程序android和iOS平台ได้ด้วยการเขียน代码Codeยเพีรั้งเดียว! ApplicationรียแบบาการพัฒนาApplicationแบบHybridก็ได้องใช้ภาษาที่ผูกติดกับPlatformใดPlatformหนึ่งนนiOSก็จะใช้Swift / Objective-CงางAndroidจะใช้Kotlin / Java 响应式编程异步编程概念กันอางหนึ่งที่วันนนราจะมาอธิบายConcept 响应式จะนReอะไรกัน? 反应堆activeายถึง“ซึ่งการตอตนอง”ตัวอย่างเช่นเราเอนเล่นๆสแครชไปสแครชมาเป็นDJแน่นอนเพื่อนคงไม่ให้เราถูหัวเล่นอยู่อย่า่นั้นใช่ปะใช่ปะองมีสวนกัน มีActงแหละActก็จะมีReact 文本字段(Act)文本字段 “ค่าเปลี่ยนแล้วววววววววววว”(反应)…ทำนองนั้นภาษาทางเทคนิคเรียกว่าEmitถ้าเราพิมพ์“ Hello”ออกไปมันก็จะEmitหลังจากที่เราเคาะแป้นแต่ละที “ H”→发射 “他”→发射 “ Hel”→发射 “地狱”→发射 “你好”→发射 ถ้ามีคนตะโกนพูดก็ต้องมีคนฟังว่าไหม? ะาพูดคนเดียวนี่เหมือนคนบ้านะ55 订户/观察者ในที่นี้ยกตัวอย่างเป็น表视图ส่วนเส้นๆที่เห็นนั้นเนเรียก可观察的顺序 Textรั้งที่ค่าใน文本字段เปลี่ยน表视图จะรู้เสมอเพราะคอย观察อยู่👀ากนั้นจะเอาอักษรแต่ละตัวมาแสดงหรืออื่นๆก็แล้วแต่เราจะเขียนโปรแกรม จะมีนิดนึงคือจะมี订户มารอฟังกี่ตัวก็ได้และ可观察的ไม่จำเป็นต้องเป็นUIอย่างเดียวจะเป็นตัวแปรหรืออย่างอื่นก็ได้นะะ iOSนที่เขียนiOSมาบ้างแล้วอาจจะสงสัยว่าจริงๆแล้ว异步编程ในiOSก็ใช้กันปกติอยู่แล้วเช่น 大中央派遣 通知中心 关闭 委托模式 响应式编程เพิ่มหละ? ที่AppleมีAPIใSDKให้ใช้หลตัวซึ่งช่วตัวซึ่งช่วตัวซึ่งช่วก็มีวิธีกออไม่มีแต่งกลับกัไม่มีไม่มีเขีไม่มีไม่มีไม่มีไม่มี ใจรือการทำความเข้าใจ代码 表格检视 步骤การ实现ของTableView 设置“代理”ให้กับTableViewทำให้TableViewมันรู้ว่าถ้าจะโชว์数据ต้องไปถามใครว่า数据มีกี่แถวแต่ละแถวเป็นยังไง…ฯลฯ 采用“ Protocol”协议,TableView和协议2协议。 功能ที่ใช้returnจำนวนCell 函数ที่ใช้returnข้อมูลของแต่ละCell 5.在TableView中,使用Reload编程(Reactive编程)。 แหละ55) 载入中… งาดูตัวอย่าง异步อีกอันบ้างเกี่ยวกับการโหลดข้อมูล 步骤การ工具ของ加载东西 มี功能ที่ใช้จัดการเกี่ยวกับการ加载ข้อมูลต่างๆโดยจะรับClosureเข้าไปเป็น参数ตัวหนึ่ง 功能ก็ทำงานจะโหลดหรืออะไรก็ว่าไป… กอทำงานเสร็จก็จะมาเรียก关闭ที่เราส่งเข้าไป Functionาใช้งาน功能นี้ไม่ว่าใน类ใดก็ตามก็จะต้องใส่Closureเข้าไปเพื่อบอกมันว่าจะต้องทำอะไรต่อเมื่อทำงานเสร็จ ynนยังว่ามันเป็นAsyn […]

任何和任何对象类型

Buyazımdaşukonularıanlatmayaçalışacağım: 有什么天体吗? Hangiamaçlakullanılmaktadır? Any&AnyObject库兰纳姆·阿拉纳基 Swift编译器Arka Planda Neleryapıyor? 任何türündenbirdeğişkenindoğrukullanımı 任何bir推荐人吗? 编译器buradanasıldavranır? 是否有türdendizilertanımlayabilirmiyiz? 任何ile AnyObjectarasındaki fark nedir吗? 迅捷的语言处理程序,可直接执行程序。 Diğerdillerindizaynından,sentaksyapısından,iyiyönlerindenfaydanılarakoluşturulmuş。 迅捷的programlama dilinin多范式 olduğunusöylemiştik。 Yani 面向对象的功能性程序,可用于程序设计。 Java,C#程序在对象中的作用。 C ++ dilinde iseböylebir teknik yoktur。 Swift Dili Burada C ++ Diline苯甲醚。 有什么天体吗? Hangiamaçlakullanılmaktadır? 任何önceliklebirtürdür 。 Herhangitürdenbir nesneye任何isimli birtüreatayabiliriz。 任何türündennesneyaratamayız。 Burada kiçözümyolu Referans bildirmektirçünkühertürdennesne anytüründenReferansa atanabilir。 Hemenörneğebakalım: Yukarıdaki grafikteherşeyçokaçıkduruyor。 AnyObjecttürüne是指türlerineilişkinnesneler atayabiliyoruz。 任何türüne都是她的türdennesne […]