Tag: swift

使用Swift爆炸IPv4范围。 💥

最近,在使用SwiftNIO进行宠物项目时,我发现需要将定义为范围的IPv4集扩展到IP地址数组中。 我上过Google,但是可惜,我在Swift中找不到任何预先存在的模块或代码示例。 我还简要阅读了Apple的新Network.framework,其中引入了新的IPAddress Type和其他一些简洁的东西……但是它不包括对我所寻找的功能的支持。 😔 在过去的类似项目中,我已经多次使用ipaddress等python库。 就像一个好的图书馆一样,它们总是抽象化事物的工作原理,并为您提供一种或两种简单的方法来完成大多数任务。 我自己做一个简化版本有多难? 事实证明,一次尝试以错误的方式做几次就不会太难。 IP范围 经过几次失败的尝试,尝试使用花式迭代和不同八位位组级别的嵌套后,它突然浮现了…… “ IP地址实际上只是用易于沟通的包装表达出来的大数字”🧐 这是真的。 IPv4地址只是1到4,294,967,296(IPv4地址空间)之间的整数,表示为由句点分隔的4个8位数字(八位字节)。 知道这一点,问题就变得简单得多。 要将IP范围扩展到其组成地址列表中,您只需执行几个简单的步骤。 将上限和下限转换为整数。 构建一个数组,其中包含上限和下限之间的所有整数。 遍历数组,将整数转换回IPv4格式。 我编写了几个函数,使用几种不同的方法来完成这些步骤。 IP到整数 从IPv4转换为整数并不复杂。 我研究了几种方法。 第一种方法较为详细,但对于某些人可能更容易理解。 它的工作原理是遍历IP地址中的八位位组,然后将每个八位位组乘以下一个256的幂。这是有效的,因为IP地址的基数为256。 使用base256的IP到Int 另外,您也可以在Swift中使用位移运算符来完成此操作。 如您所见,我们的通用函数看起来非常相似,但是,我们只是在移位位,而不是进行算术运算。 使用移位将IP转换为Int 整数到IP 我认为这是棘手的部分。 同样,我们可以通过从较早的时候反转256操作的幂或使用位移来做到这一点。 但是,与从IP到Int不同,在这种情况下,按位运算显然不那么复杂。 这里使用256的幂的基本思想是在每次迭代期间(从最高有效到最低有效)使用循环提取原始IP的一个八位位组。 这有点混乱,因为第一个八位位组和最后一个八位位组与中间两个八位位组的处理方式必须有所不同。 幸运的是,按位执行此功能非常容易。 在这里,我们只是进行移位操作和按位与,以确定每个八位位组值。 放在一起 这确实是很容易的部分,并且不管上面使用的方法如何组合都应该起作用。 使用Swift即可进行简单的IPv4范围扩展。 如果您知道执行此操作的任何更优雅或有效的方法,请在评论中分享。

第一天-倒数计时器应用程式

我的眼睛从我的头上掉下来,所以明天我要把这只小狗写出来,但是我们从第一天开始,我们有点像应用程序了! 自动版面 直到现在,我还没有想到您在Sketch中看到的自动版式并不是他们的主意。 而是基于Xcode本身内置的工具。 它超级直观,非常适合确保您的视图适合多种设备。 每日反思播客 锚点-开始播客的最简单方法 启动播客的最简单方法。 100%免费创建,分发和托管您的播客。 锚 时间跟踪 为了弄清楚获得半水平的应用程序开发所需的时间,我将跟踪自己的时间并记录所涉及的小时数。 请记住,我有3个5岁以下的孩子,所以这是一个充满激情的项目,发生在晚上的沙发上,而不是Netflix。 为了使它更有趣,我将在成本和代理费率两方面都加一个时间值。 费用:60澳元 中介费:$ 150 AUD

Swift 4 —动画NSLayoutConstraints:简单菜单

Swift 4(iOS)中的动画,我们可以使用多种方法来制作UI元素或过渡的动画。 我们可以使用Transform方法,CGRect,CGPoint甚至约束。 可以将动画代码添加到动画代码内部,该代码通常为UIView.animate(_ :)或UIView.animateKeyframes(_ :)。 由开发人员选择。 视频教程已添加到此处-SwiftDynamics YouTube频道。 在这里,我将向您展示如何使用UI元素的NSLayoutConstraints对象为UI元素设置动画。 NSLayoutConstraints对象可以是任何值,即; 高度,宽度,中心约束,顶部空间,底部空间,尾随或前导空间等。让我们深入研究示例。 我们将使用我在本文中创建的TableView应用程序:快速4的视差效果。 首先,在顶部菜单栏顶部的UIView。 让我们为其添加约束。 高度和宽度可以添加如下, 下一步是为按钮添加顶部空间和结尾空间约束。 将最高约束优先级更改为999 现在为UIView对象添加底部空间,并将其优先级设置为999 。 将值设置为40。 您可能会在情节提要中发现错误,而忽略它。 让我们为ViewController类的顶部和底部约束创建对象引用。 现在,在`scrollView`的`scrollViewDidScroll(_ :)`中添加用于更改菜单按钮底部和顶部约束的代码。 func scrollViewDidScroll(_ scrollView:UIScrollView){让contentOffset = scrollView.contentOffset.y-oldContentOffset.y如果contentOffset> 0 && scrollView.contentOffset.y> 0 {//向上滚动 if(menuUpConstraints.isActive){ menuBottomConstraints.isActive = true menuUpConstraints.isActive =否 animateConstraints() }} if contentOffset <0 && scrollView.contentOffset.y <0 {//向下滚动if(!menuUpConstraints.isActive){ menuBottomConstraints.isActive =否 menuUpConstraints.isActive = true […]

Objective-C和Swift —友好

有时候,对于Swift开发,仍然需要Objective-C。 例如,使用我在Swift,Speculid中内置的一个这样的应用程序,我需要引入Objective-C代码。随着2.0版中C ++库的引入,Objective-C成为必需。 幸运的是,有一些方法可以使Objective-C和Swift以友好的方式一起工作。 Speculid是使用最新版本的Xcode构建的完全开源的应用程序。 它可以自动将PNG和SVG文件转换为完整的图像集和应用程序图标的过程。 在第一个版本中,它需要安装Inkscape和ImageMagick以便于将图像从SVG或PNG转换为PDF或PNG。 这在安装和使用上都变得麻烦。 对于2.0版,我希望通过删除任何先决条件步骤和预先存在的依赖关系,使安装和集成过程尽可能地容易。 这意味着将所有必需的依赖项打包在应用程序包中。 在这种情况下,我们使用两个C ++库Cairo和libRSVG 。 开罗是整个开源社区中使用的领先2D库,而libRSVG用于读取SVG内容。 有了这两个库,接下来的挑战就变成了将它们集成到Swift代码中。 到目前为止,Swift无法直接与C ++交互。 因此,我们需要一个中介,并且这些中介可以是C或Objective-C的代码。 尽管C具有一些简单性,但在这种情况下,我选择了Objective-C。 我不仅拥有Objective-C的经验,而且Objective-C与Apple生态系统具有强大的集成。 尽管C的简单性。在我使用Objective-C时,我想将大部分代码保留在Swift中。 Objective-C仅在需要时用于与C ++库接口。 Swift将与用户交互,管理作业等……Objective-C将调用C ++库来构建实际的图形。 Swift代码将完全不了解实际用于读取,操作和写入结果文件的代码。 这是该过程的简要概述: Main —实例化并运行NSApplication SpeculidApplication —查找有问题的文件并使用Codable解析文件 查找源图形文件(PNG或SVG) 解析资产目录文件 解析规范文件中的规范 创建要传递给Objective-C代码的规范 在Objective-C中 ,使用传递给C ++函数的规范来写出目标图形文件(PNG或PDF) 有两种方法可以使我们的Objective-C和Swift代码协同工作。 一种是确保API使用兼容的类型。 Objective-C不使用Swift Structs。 这使类成为在Swift和Objective-C框架之间传递复杂数据的唯一方法。 但是,为了使接口彼此不可知,我们可以在Objective-C API中创建协议,这些协议可以向Swift表示所需的内容。 在我们的Objective-C框架中,Swift提供了两种方法。 调用Cairo库并采用ImageSpecificationProtocol和ImageHandle对象的主要方法: @interface CairoInterface:NSObject +(BOOL)exportImage:(id )sourceHandle withSpecification:(id )规范错误:(NSError **)错误; @结束 […]

在iOS应用中使用Coordinator模式的真实示例

当代的编程世界充满着潮流,谈论iOS应用程序是很重要的。 希望我没有误会说协调器是近年来最时髦的建筑模式之一。 因此,我们的团队在不久前意识到了尝试这种方法的不可抗拒的愿望。 特别是因为它获得了幸运的机会-逻辑上的重大变化和应用程序导航的全面重新开发。 该文章的第一版是用俄语编写的,并在此处发布。 问题 通常,视图控制器承担太多责任:它们直接“ UINavigationController命令”以拥有UINavigationController ,与同级视图控制器“通信”,甚至实例化它们并传递给导航堆栈,总的来说,它要做很多事情不在他们的责任范围内。 避免此类问题的一种方法是协调器。 事实证明,这还算是非常方便且非常灵活的:模式代码能够管理小模块(可能是唯一的屏幕)和整个应用程序(相对而言,直接从其开始)的导航事件。 UIApplicationDelegate )。 历史 Martin Fowler在他的《企业应用程序体系结构模式》一书中将这种模式称为应用程序控制器。 Soroush Khanlou被认为是iOS环境中的第一个推广者:它始于2015年他在NSSpain会议上的演讲。然后,他的网站上出现了一个思想片段,该思想片段具有多个扩展名(例如,这个扩展名)。 然后是许多概述(“ ios协调器”查询提供了许多质量和细节各异的结果),包括有关Ray Wenderlich的教程和Paul Hudson的“用Swift入侵”的文章(在有关“大规模”视图问题的系列出版物中)控制器)。 向前运行,最引人注意的讨论主题是UINavigationController “后退”按钮的问题。 因为点击它不会被我们的代码处理,所以我们只能有一个回调。 为什么有问题? 像任何其他对象一样,存在于内存中的协调器必须由另一个对象拥有。 通常,当通过协调器构建导航系统时,其中一些会创建其他并在其上存储强大的参考。 子项完成后,父项将控制权收回,子项协调器使用的内存必须释放。 Khanlou对问题的解决方案有自己的见解,并注意到其他一些推荐的方法。 无论如何,我们会回到原点。 第一种方法 在显示任何代码之前,我想解释一下,与真实的设计原则完全一致的代码片段和使用示例在不会妨碍良好感知的地方会得到简化和缩短。 当我们第一次开始尝试模式时,我们没有足够的时间和自由度:我们必须考虑现有的设计原则和公认的导航系统。 第一个版本基于拥有并控制UINavigationController的通用“路由器”。 它可以对UIViewController实例执行与导航有关的任何操作:“按下” /“弹出”,“显示” /“关闭”,以及使用“根视图控制器”的操作。 接口示例: 导入UIKit 协议路由器{ func present(_模块:UIViewController,动画:Bool) func dismissModule(动画:Bool,完成:(()-> Void)?) func push(_模块:UIViewController, 动画:布尔, 完成:(()-> Void)?) func popModule(动画:布尔) func setAsRoot(_模块:UIViewController) […]

从Swift 4迁移到Swift 5

好极了! Swift 5终于来了。 🎊 这是Swift的下一个主要版本,并且最终带来了ABI稳定性 。 除此之外,还添加了几个新的关键功能,包括原始字符串,将来的枚举大小写,结果类型,检查多个整数等等。 稍后我们将在另一篇文章中介绍有关Swift 5的所有功能,我将尽快提供其链接。 现在,我们将讨论将现有的Swift 4代码迁移到Swift 5的问题。 迁移器将负责许多更改,但是您可能需要进行一些手动更改,才能在应用更改后构建项目。 就像您可能需要应用一些修复程序或更改某些功能及其声明,如上面概述中所述。 另外,您可能还需要编辑某些第三方库和Pod。 但不必担心,它们只是最小的变化。 耶eh! 现在您已完成迁移。 🎉 就是这样! 你完成了。

适用于Noobs的iOS App开发入门包

要开发iOS应用,您需要在Swift中进行编码并将Xcode用作IDE。 您将需要一台Mac,因为用于开发应用程序的Xcode不能在Windows上运行。 一些建议: 下载 Xcode 。 阅读 Swift文档 了解Swift。 这对于调试您在代码中造成的愚蠢错误很有帮助。 创建一个Stackoverflow帐户 ,以便在遇到问题时可以发布编码问题。 创建一个GitHub帐户。 GitHub是一个版本控制系统。 如果您要与其他人一起创建应用程序,那么这是两个人同时处理该应用程序的好方法。 您不必通过电子邮件相互发送项目文件。 GitHub也很棒,因为如果您完全搞砸了并且您的应用程序不再运行,则可以还原到该应用程序的先前版本。 观看 Standford iOS 9 App Development讲座视频 。 它们有些过时,但是它们涵盖了一些重要的主题,例如MVC(模型-视图-控制器),表视图,多线程和闭包。 遵循YouTube /在线教程。 我真正喜欢的一些Youtube iOS开发人员是: Lets Build that App和Jared Davidson 。 Ray Wenderlich适合用于长期深入的教程,而CodeWithChris也是另一个受欢迎的Youtube iOS开发人员。 但老实说,入门包只是一个建议。 您能做的最好的事情就是从您的应用程序开始! 无需准备。 每当您感到困惑时,只需使用Google或Stackoverflow。 这就是我第一个应用程序所做的。

Swift4 Day36:我有钱,骰子

日期:8/10(三) 新的副本 上完魏巍老师的Swift3从入门到精通后,自己又乱开iOS副本,在Facebook粉丝团softnshareGroupBuy有很多udemy的课程免费代码。 iOS 11和Swift 4-完整的iOS应用开发训练营 因为有介绍想学新的iOS AR kit跟图像识别的方法,而且里面也有很多复习的基础内容,就跟着练习了,讲解内容超详细,不会从头开始教let var继续在学习过程中反覆带入观念。虽然没字幕有点吃力但也算是一种练习吧。 我有钱 Angela介绍了一个只用UI元素做一个应用在苹果商店上卖999块美金,超胡搞瞎搞的😂 然后让我们自己做一个之后放到udemy的QA栏位 骰子 但是好的程式码希望是可以不要重复写的。 所以用func包起来,让程式码更简洁也让读入画面时就直接是乱数。 魔术8 会给你类似的作业让你自己明确的去实作一个新的作品

使用Google iOS SDK将文件上传到Google云端硬盘

关于如何将文件上传到现有Google云端硬盘文件夹的快速演练 Google云端硬盘的Google Developer文档中没有专门的iOS集成部分。 我花了很短的时间来弄清楚如何将文件上传到现有或新文件夹 ,并且这篇文章总结了如何执行此基本操作。 脚步 先决条件:设置本机Google登录。 请参阅此帖子以获取分步说明。 导入Google Drive REST API客户端SDK 在您的应用中设置Google Drive API服务 检索现有文件夹或创建文件夹 上载档案 导入Google Drive REST API客户端SDK Cocoapods是SDK的推荐交付方式。 SDK源文件位于Github上。 将以下内容添加到您的Podfile中: use_frameworks! #当时固定到最新版本 pod’GoogleSignIn’,’〜> 4.4.0′ pod’GoogleAPIClientForREST / Drive’,’〜> 1.3.7′ 在您的应用中设置Google Drive API服务 为了简洁起见,所有方法都在单个视图控制器中实现。 在应用中成功设置Google登录后 ,还需要在GIDSignIn单例对象上指定访问范围,该对象用于管理OAuth身份验证和授权流程: 导入GoogleSignIn 导入GoogleAPIClientForREST 类ViewController:UIViewController { 覆盖func viewDidLoad(){ super.viewDidLoad() GIDSignIn.sharedInstance()?. delegate =自我 GIDSignIn.sharedInstance()?. uiDelegate =自我 GIDSignIn.sharedInstance()?. scopes = [kGTLRAuthScopeDrive] […]

使用Apple的iOS 11 Vision框架进行人脸检测

今年秋天,来自Apple的好东西! 在许多新的API中,有Vision框架可帮助检测人脸,人脸特征,对象跟踪等。 在这篇文章中,我们将探讨如何使人脸检测工作。 我们将制作一个简单的应用程序,它可以拍摄照片(使用图库中的相机),并在检测到的脸上绘制一些线条,以向您展示Vision的力量。 选择图像 我将快速进行介绍,因此,如果您是一个真正的初学者,而您觉得这样做太难了,请首先查看我以前的iOS相关文章“ 构建旅行照片共享iOS应用” ,因为它具有相同的照片选择功能,但是详细解释。 您将需要Xcode 9 beta和运行iOS 11 beta的设备进行测试。 让我们从创建一个新的名为FaceVision的 Single View App项目开始 : 打开Main.storyboard然后将Take Photo按钮拖到其中心。 使用约束使其停留在该位置🙂为其创建一个takePhoto动作: 现在,创建一个名为ImageViewControler.swift的新UIViewController类,并将其设置为您刚刚添加到Main.storyboard中的新View Controller的Main.storyboard : 还要为“ 图像视图”添加一个出口,并添加一个新属性来保存用户的图像: 检测面部特征 现在该到有趣的部分了,检测图像中的面部和面部特征。 为流程创建一个新的process动作! 具有以下内容的按钮: 希望您喜欢这个,请在​​评论中让我知道如何进行以及是否有可以改进的地方。 此外,使用该应用程序拍摄的某些照片完全不会受伤🙂 您可以从此处获取代码:https://github.com/intelligentbee/FaceVision 谢谢! 最初发布于 smartbee.com 。