Tag: 编程

TIL:Int()和Int之间的区别! 在斯威夫特

这是我在Swift中迈出的第一步,所以这是我要写的东西,因为Kotlin具有令人难以置信的相似之处。 在声明变量时,我发现有两种不同的方法可以创建具有声明类型的实例。 我以Int为例,但这可能会扩展到Swift中的任何类。 首先,使用Int! ,则会使用声明的类型创建一个新变量,但其中没有默认值。 var x =整数! //使x = nil直到分配适当的值 另一方面,Int()是使用Int类的构造函数创建变量的方法。 在此类的非常特殊的情况下,默认情况下此变量的初始化为0。 否则,应将值声明为参数。 因此,以下声明将引发以下值: var x = Int()//使x = 0 var y = Int(9)//使y = 9 就像我之前说过的,Kotlin有类似的声明方法,但最终我会写它。 要了解有关Swift的更多信息,请尝试使用我发现非常有趣的Swift基础知识进行此链接 还有另一种方法来声明我尚不知道的类实例吗? 请告诉我。

在Swift中搜索旋转数组

最近,我发表了有关旋转排序数组的文章。 然后将其旋转k个元素(在以下示例中向左旋转4个)。 蛮力 线性搜索-这将花费O(n)的运行时间,下面是一种可能的实现方式: 简而言之:图形“上升”。 我们的目标数组不这样做,但是: 灰线表示第一个分割。 数组右边大于k的那些元素已被拆分。 我们可以使用此信息执行二进制搜索修改以找到k。 也就是说,如果右边的元素小于当前元素,即nil,则我们位于第k个元素。 我们知道第k个元素是否在当前搜索词的左侧(如果在“行下方”),是否在右边(如果在“行上方”)。 实作 我们可以运行一次简单的二进制搜索两次 显然,如果我们在上半年找到目标,就可以停止。 这是上半部分的示例调用: binarySearch(arr,14,0,k) 我们可以做得更好吗? 我们不能创建一个自定义的二进制搜索,其中数组的两半不必位于同一物理数组中吗? 我们必须创建映射函数: 我们还需要一个真正的模运算符,例如: 然后,我们可以修改二进制搜索以使用映射和辅助函数: 可以用以下代码调用它,它表示以下有序数组3,5,6,7,9,12,14,该数组在位置4(k)处拆分为7,9,12,14,3,5,6 。 我们可以寻找12,并期望我们的函数返回true。 让 arrMapped = [7,9,12,14,3,5,6] binarySearchMapped(arr:arrMapped,目标:12,k:4) 我们为什么要这样做? 以这种方式映射二进制搜索是棘手的,但此处显示了对所使用算法的理解。

iOS:使用IBInspectable

顾名思义,本教程将指导您如何直接通过IBInspectable(InterfaceBuilderInspectable)从Interface Builder设置控件上的自定义值,我们可以创建可以在Interface Builder中检查的属性。 让我们以按钮为例,假设我们必须在按钮上设置拐角半径或边框宽度或颜色。 创建UIButton的子类,并使用IBInspectable添加以下属性,并实现其setter和getter 现在选择“属性”检查器。 您将看到自定义属性出现。 您可以设置所需的值而无需编写任何代码。

iOS 12中的Siri快捷方式简介

在圣何塞举行的WWDC 2018上,Apple宣布了Siri Shortcuts,这是期待已久的功能,它使开发人员能够在自己的应用程序中扩展和增强Siri的功能。 以前,SiriKit SDK的整体功能非常有限。 随着Siri快捷方式的出现,开发人员可以扩展Siri的功能并构建自定义语音操作来调用应用程序。 Siri Shortcuts的核心是自动化。 实际上,Siri Shortcuts是由Workflow演变而来的,Workflow是由前WWDC学者构建的iOS自动化应用程序。 苹果于2017年收购了Workflow,但此举并不具有特色,因此在被收购后该应用就一直在App Store上保持上线状态。 快捷方式使您可以向Siri展示应用程序的功能。 如今,Apple的新Siri Shortcuts应用程序大量借鉴了Workflow应用程序。 但是,区分语音快捷方式和“快捷方式”应用程序很重要。 快捷方式应用程序允许用户为日常日常任务创建基于语音的短语,而Siri快捷方式则使开发人员能够在自己的本机应用程序中扩展Siri的功能。 在撰写本文时,“快捷方式”应用程序无法在iOS 12 Beta 2 Build中进行测试。 相反,我们将在我们构建的自定义应用程序中探索Siri快捷方式的实用程序。 注意:本教程假定您已基本熟悉NSUserActivity API。 如果您不这样做,请在此处参阅有关该主题的出色教程。 在本教程中,我们将探索如何在一个简单而基本的项目中利用Siri快捷方式,该项目将使用户说出“ Say Hi”之类的短语,然后我们将启动我们的应用程序并显示一个UIAlertView。 该应用程序的目的是提供一个简单的概述,说明如何在您的应用程序中集成Siri快捷方式,而不会增加大型项目的混乱情况。 在本教程结束时,您应该对SiriShortcuts背后的用例和技术有扎实的了解,并且知道如何将它们与应用程序集成! 在开始任何新项目时,重要的是首先花一些时间来建立基本的项目结构。 首先,请确保您具有iOS 12,macOS Mojave和Xcode 10的最新开发人员预览。如果您没有这些工具,那么您将无法运行本教程中的代码,因为Siri Shortcuts是该工具中引入的新API。 Xcode 10和iOS 12 Beta。 如果您是注册的Apple Developer,则可以从Developer Site下载它们。 启动Xcode并创建一个新的Single View App,在SiriShortcuts中键入名称(或您想要的任何名称)。 我们将com.appcoda包含为组织标识符,但可以随时将其更改为您自己的组织标识符。 完成后,单击“ 创建”以加载Xcode项目。 首先,导航到Xcode项目的“ 项目设置”部分,选择“ 功能” ,然后向下滚动,并确保启用了Siri,如下所示。 这将使我们能够在应用程序中使用Siri […]

Swift在Swift上进行临时构建

Otimizando ocódigopara tratar问题,因为没有编写XCode的编译器。 讨论和更新Swift 2.2编译器中的简单对象。 动机吗? 自动翻译为自动翻译。 简易执行程序, 快速安装程序, Swift 2.2 ,编译器指南。 从下至上都可以归纳为问题的坟墓,可以从最简单,最简单的形式到最简单的形式。 集市想象一下,科斯·迪戈斯·科莫斯·埃斯帕尔哈多斯·波普里托·波多里亚·波罗佩拉·科比塞纳:霍拉斯,塔尔维斯·迪亚斯·德·比米拉。 😤 Esteéumuma deinferênciade tipo。 可以快速编译XCode的连续性命令,可以连续,连续地编辑和编辑其他类似的代码。 特殊的辅助功能,辅助阵列的辅助功能,临时性的辅助功能。 暂无评论,或直接查看一份证明书 : 声明书中的验证字是正确的。 😏 情景推论是主要的有利时机,它是Apple的Lanscape或Swift,完全由utiliza-la开发。 事发时,事例等同于事态的解决方案(编译成事例),是确定事例的辅助工具,还是事主! 一个解决方案,可以帮助您快速编译编译器..🤣 迅速解决问题,并迅速完成了配置, 调试了时间功能主体并完成了配置。

学习Swift:我是否过于乐观?

我一直在盯着我在免费在线指南的帮助下开发的相机应用程序的非常基本的布局。 没什么特别的,实际上这很糟糕,但这只是一个开始。 但是,我想知道我对Swift的学习能力是否过于乐观……我应该从更简单的事情开始吗? 简化我的方法? 构建Instagram副本时听起来很有趣。 对于初次使用编码器的人来说,挑战可能太大了。 我认为我应该想出一个简单的应用程序构想,以学习功能工作原理以及Xcode布局的一些基础知识。 我一直在研究Apple的“学习编码”电子书,这对我很有帮助,但它也使我真正了解到要学习多少信息。 学习所有内容都不是问题,但是正如前几天我告诉妻子的那样,我目前正在了解婴儿的水平。 我可以发出声音,也许其中一些声音可能会误认为单词。 但是,我还不能真正进行交流,我当然不能将单词串连接在一起以创建句子或讲故事。 应用程序构建是一个学习过程,我需要一次走一小步,我认为最好的方法是退后一步,尝试创建一个更简单的应用程序并以此为基础进行构建。 因此,因此……我本周的任务是使用Swift创建一个简单的应用程序。 明天,我将有更多关于此应用程序的功能以及如何使其正常运行的信息。 在此之前-保持推荐,关注和分享。 您的支持将帮助我继续前进! -J

作为iOS开发人员实习生的12周-第九周

第9周真是令人兴奋! 我参与的一个项目已经发布,当然我也学到了新东西,我将在这里分享一些内容: 项目发布 我参与开发的面向消费者的iPad售货亭系统已在旧金山正式发布! 该应用程序用于为快速/休闲连锁店点餐/领取食物😊 建立消费者使用的东西真是太了不起了,我为此而活。 我等不及要把信息亭系统扩展到其他城市了! 我也很想去旧金山一探究竟 为成功发布而欢呼雀跃! 在StackView中对组件进行动画处理 如果输入无效,我必须设置一个错误UILabel动画,以在textField下面显示一条错误消息。 错误标签应来自无效输入下方,并在两秒钟后进行动画备份。 在上面的示例中,电子邮件字段不正确,因此错误UILabel应该动画,并在两秒钟后消失。 每个字段都是可重用的自定义UIView。 在每个字段中管理状态以验证输入。 errorLabel位于自定义UIView内,最初被隐藏并限制在自定义UIView的边缘 输入无效时,自定义UIView的高度将更新为初始高度的2倍 UIView.animate用于取消隐藏错误标签,并将errorLabel设置为UIView底部的动画 当在stackView中扩展不同的组件时,必须将发行版设置为以下内容, 否则它不会扩展并将下层的view向下推 stackView.distribution = .fill按比例 隐藏 当隐藏并取消隐藏UIView时,如果考虑一下,似乎只是在更改Alpha。 (0不透明度将不显示任何内容,而1的不透明度是完全不透明且可见的。尽管isHidden和更改alpha不透明度不能一起用于隐藏和取消隐藏视图。 例如,如果UIView用.isHidden隐藏,则.alpha更改不会取消隐藏它。 myView.isHidden = true myView.alpha = 1。 //这不会取消隐藏视图//以下将隐藏并取消隐藏myView.isHidden = true myView.isHidden = falsemyView.alpha = 0 myView.alpha = 1 在UILabel上填充 我必须使用一些填充文本和背景颜色,这些颜色从屏幕的左边缘一直延伸到屏幕的另一侧和边缘。 UILabel上没有内置的可自定义填充/插入。 显而易见的答案是将UILabel放在容器UIView内,并约束标签,以使标签在容器视图内具有填充。 虽然我无法将其用于由可重用的自定义UIView组成的stackView。 意见的顺序很奇怪。 即使容器视图是在错误UILabel之前添加的,并且错误标签已添加到容器中,但它仍显示在UILabel的顶部,完全遮盖了UILabel。 我在stackOverflow上的UILabel上发现了这个强烈的填充扩展,它起作用了: 第9周就这些了! 感谢您的阅读! 在这里阅读有关iOS开发者实习的第7和第8周的信息 […]

Swift Vs C ++:速度

如果您决定在使用Swift和C ++之间进行选择,那么性能可能就是您要考虑的一件事。 这篇文章将向您展示这两种语言的快速基准测试,以便您做出自己的决定。 免责声明! 这是一天之内用一个程序进行的一项测试。 在其他情况下,这种差异很有可能会有所不同。 另外,如果您从撰写本文之日(2019年3月6日)开始阅读此书,这两种语言的性能可能会由于更新而有所改善。 有了这一点,让我们开始吧! 测试方法 为了进行此测试,我将使用我最喜欢的程序:查找质数。 基本上,我将使用相同的算法创建一个简短的程序来确定数字是否为质数。 然后,我将使用for循环遍历从0到1,000,000的所有数字,并确定哪些数字是质数。 为了最大程度地确保准确性,我将把输出通过管道传递到wc -l以注意发现的数量上的任何差异。 迅捷程序 func isPrime(_ num:Int)->布尔{ 如果num <= 1 { 返回假 } 如果num == 2 { 返回真 } 对于2中的i .. <Int(Double(num).squareRoot()+1){ 如果(num%i == 0){ 返回假 } } 返回真 } 为我在0 … Int(CommandLine.arguments [1])中! { 如果isPrime(i){ 打印(i) } } C ++程序 #include #include 使用命名空间std; […]

在iOS第1部分中保存数据

用户默认数据库的接口,您可以在其中存储应用程序启动期间的键值对。 User Defaults类提供了用于与默认系统进行交互的编程界面。 所有iOS设备都有一个名为默认数据库的数据库,以提供用于永久保存应用程序相关数据的功能。 这样,应用程序可以访问存储的值,然后根据这些值执行逻辑。 在运行时,我们使用用户默认值对象从用户的默认数据库中读取应用程序使用的默认值(存储的首选项或值)。 用户默认值会缓存信息,以避免每次我们需要默认值时都必须打开用户的默认值数据库。 此处引用的缓存是内存中缓存,这意味着存储在“ 用户默认值”中的所有内容都会在应用启动时加载到内存中,并在应用运行时保留在内存中。 根据存储的数据量,这或多或少会影响设备性能。 当我们设置默认值时,它将在我们的流程中同步更改,并异步更改为持久性存储和其他流程。 只需在运行时更改任何存储的默认值的值,它就会从缓存同步更改其值。 从那里将其异步保存到磁盘(数据库)中,因为这类I / O(操作)有点昂贵。 →存储为默认值: User Defaults类提供以下方便的方法来访问常见类型,例如浮点数,双精度数,整数,布尔值和URL。 func set(_ value:Any ?, forKey defaultName:String) func set(_ value:Int,forKey defaultName:String) func set(_ value:Float,forKey defaultName:String) func set(_ value:Double,forKey defaultName:String) func set(_ value:Bool,forKey defaultName:String) func set(_ url:URL ?, forKey defaultName:String) 要使用具有用户默认设置的对象,该对象必须是Propertylist类型或Json类型。 例如字符串,数字,数据,日期,数组/字典。 如果我们想将自定义对象与userdefaults一起使用,则需要将它们转换为data(object)类型。 即使我们将可变对象设置为值,从UserDefaults返回的值也是不可变的。 例如,如果我们将可变字符串设置为“ MyStringDefault”的值,则稍后使用string(forKey:)方法检索的string(forKey:)将是不可变的。 如果我们将可变字符串设置为默认值,然后再对该字符串进行突变,则除非再次调用set(_:forKey:) ,否则默认值将不会反映该突变的字符串值。 例如, […]

成为更好的Swift(iOS)Developer 1.1的技巧

Swift对新程序员很友好。 它是一种工业级质量的编程语言,与脚本语言一样具有表现力和令人愉悦。 这里是成为更好的Swift开发人员的一些技巧。 您可以将代码段复制并粘贴到Playground中,以使其更易于理解- 半开范围运算符(a .. <b)定义了一个范围,范围是从a到b,但不包括b。 半开范围运算符还具有只写有最终值的单面形式。 1.1使用半开范围操作器(或or代码) 让名字= [“维拉特”,“米兰”,“尼克”,“布罗”] 名称中的名称[.. <2] { 打印(名称) } / *打印- 维拉特 米兰* /用于以名称表示的名称[1 .. <3] { 打印(名称) } / *打印- 米兰 缺口 * / 1.2不带半开范围运算符(或💩代码) 让名字= [“维拉特”,“米兰”,“尼克”,“布罗”] for names.enumerated()中的(索引,名称){ 如果索引<2 { 打印(名称) } } / *打印- 维拉特 米兰 */ 或使用while循环(仍为💩代码) 让名字= [“维拉特”,“米兰”,“尼克”,“布罗”] var index = 0 而索引<2 […]