Tag: 程序设计

Swift 3.0类说明—类型方法,单例,DatePicker,枚举,错误处理

主讲人:魏炜 实例方法(实例方法)与类型方法(类型别方法) 类型Mehod与Object-C的Class方法类似 实例方法是被型别的某个实例呼叫的方法 型别方法是定义型别本身呼叫的方法 型别方法的写法: 属性前加关键字static 函式前加关键字class 参考:方法 单例模式 单例模式确保每个指定的类别只存在一个实例对象,并且可以双击访问那个实例。 单例的写法 一样属性前加关键字static&函式前加关键字class init(){}前加private:只有自己可以初始化自己 参考:Singleton 日期 日期←> DateFormatter←>字符串 可以通过DateFormatter转换Date和String .date现在的时间 DateFormatter()生出DateFormatter(.date或.string转换日期和字符串) .datastyle调整显示时间格式 .dataFormat调整时间格式 制作倒数计时器 类别:计时器 用Timer.scheduledTimer(timeInterval:1.0,target:self,选择器:#selector(ViewController.countdown),userInfo:nil,重复:true)实现,每隔一秒,实作countdown github的:git@github.com:dan12411 / HelloDatePicker.git Enum(枚举相同类型的选项) 初衷:避免拼字错误 可加上相关值(关联值) 可加上方法 可加上原始值(记要给型别) 常常搭配Switch使用,系统已知副本,最后不用写default 错误处理(关键字throws,try和catch) 用Enum定义错误(服从错误协议) 加上关键字“ throws”标明错误处理的程序代码 加上关键字“ try”呼叫方法 改写函式内的程式码,例如,用卫抓抓出错误 guard与if..else不同在于,可以把通过条件后的动作,写在大括弧{}外 用do&catch输出错误消息

Swift 3.0类说明—扩展名,GCD,WebView,下载图像,JSON

主讲人:魏炜 延期 可帮整体类别(已知类别)加新的属性或方法 GCD 图片来源:Wei Wei 主执行绪处理UI的工作 两种方式工作模式 sync同步(做完再做下一个) async不同步(同时多工) 所以主执行绪不能放同步的工作,因为会阻挡UI的进行 串行队列与并发队列 更多:Swift的Grand Central Dispatch教程:第1/2部分 dan12411 / HelloGCD 通过在GitHub上创建一个帐户为HelloGCD开发做出贡献。 github.com 网页浏览 显示网页的特定方法:Safari / UIWebView / WKWebView / SFSafariViewController UIWebView / WKWebView连网的顺序:网址-> URL->请求-> WebView 连到非苹果的网页,要设定开起权限 UIWebView:直接拉WebView到故事板 WKWebView:用程式码写WebView,需汇入WebKit,效率比UIWebView好 Safari:连网顺序URL->:Safari iOS 10以上版本:UIApplication.shared.open(URL,选项:[:],completionHandler:无) 以前的版本:UIApplication.shared.openURL(url) SFController:需汇入SafariService,连网顺序URL->产生Controller->推出Controller 介绍UIWebViewDelegate,并使用活动指示器 载入HTML或已经写好的网页 介绍用连结打开其他APP(之后似乎其他老师会在教到) 更多:iOS 9快速上手:搜寻API与SFSafariViewController dan12411 / HelloWebView 通过在GitHub上创建一个帐户为HelloWebView开发做出贡献。 github.com 下载图片 第一种方法(用Data,记得要设定背景下载) 一样用网址产生URL 用共时伫列去下载 […]

作为iOS开发人员实习12周-第五周

我做了一个演讲,使用iPad应用程序参加了公司的野餐! 先进的斯威夫特 我在Chris Eidhof先生的Advanced Swift上做了30分钟的演讲。 我学到了很多关于Swift语言功能的知识,甚至还了解了诸如for循环之类的东西在引擎盖下如何实际工作的知识。 我写了大约八页的笔记,并创建了一个幻灯片,其中包含28张幻灯片以准备演示文稿。 我在iOS部门公司会议上作了介绍。 在演讲过程中,我很高兴意识到书中有些东西甚至连高级的iOS工程师都不知道,因为没人知道那里的一切,这没关系! 在演讲开始的那几天,我非常紧张,最终进展顺利。 除了在第一张幻灯片中我列出了错误的作者之外……–我只是在检查大家是否都在注意😅LOL jk。 事后看来,将演示文稿摆在其他演示文稿之前,以在真正的演示文稿之前捕获此类错误是一个好主意。 在iPad应用程序上工作 在本周之前,我之前从未从事过iPad应用程序的开发,因此有机会获得如此激动! 我注意到的唯一非常明显的区别是,iPad的屏幕尺寸显然比iPhone😂大。 当我使用iPad模拟器运行该应用程序时,它比实际的iPad设备要慢得多。 请务必注意这一点,因为该应用程序的某些错误在模拟器中并不明显,而在iPad设备上则显而易见。 —始终在设备上测试应用程序。 这是我本周了解到的一些信息: UIVisualEffectView UIVisualEffectView是用于创建模糊效果的对象。 上面的图片是一个模态UIView,在UIView上带有ImageView。 请注意x按钮旁边的模糊程度如何变暗,这是因为此模式UIView后面有一个深色的菜单栏。 首先创建一个具有模糊效果的UIView。 使用阴影实现灰色模糊效果 如果您查看此blurView,它具有灰色。 它是blurView后面的白色。 应该是白色的吧? 那么这是怎么发生的呢? 无法为此模糊效果设置颜色。 这是通过将阴影添加到模态呈现的UIView并将阴影半径设置为一直延伸到屏幕边缘来实现的。 动画阴影看起来要平滑得多。 公司野餐 Fuzz的野餐是在前景公园。 很高兴认识该公司更多的人,并通过热狗,汉堡和饮料与他们聊天。 我很高兴Fuzz拥有如此轻松的活动,使我能够在轻松的环境中与同事保持联系。 据预测,雷雨将在八点开始暴风雨,但它来得有点早,所以我们都去了附近的酒吧。 这是结束一周的愉快方式。 再见第五周,第六周你好!

Swift 3.0课程笔记— Firebase

演讲人:王敏 Cocoapods的安装 固定版本:pod’Firebase / Database’,’〜> 3.0’再pod安装 如果用pod update会直接更新到最新版!! 火力基地 采用noSQL,以JSON互传资料 强制绑定Analytics服务 CloudKit无法看到其他用户上传的资料 登录Firebase并获取plist文件,不要修改到plist的档名 数据库 定义数据索引:.indexOn,增快搜寻资料速度 每增加一个索引,就需要补充记忆体空间(以空间换取时间) 影响新增,删除的速度(资料树需要调整) 如果没有使用Firebase存储,如何通过由base64EncodedString()上传和下载图片,档案大小限制是10MB 存储 若使用storage,将档案存放在Firebase storage 认证方式 以facebook登录为例 登录developers.facebook和pod’FBSDKLoginKit’,再照说明文件走 连结Facebook&Firebase,输入Facebook应用程序编号&密钥给Firebase 再从Firebase OAuth重新引导URI添加到Facebook应用程序设置中 令牌获得! 再写程式码将使用者使用facebook登入资料上传到Firebase Auth 再写程式码将使用者资讯上传到Firebase数据库 脸书 分享内容功能 初步权限:“ public_profile”,“ email”,“ user_friends”(FB朋友列表只能获取有使该这个App的朋友,并非FB上全部的朋友) 得到大头照: 利用API 利用FBSDKProfilePictureView 记得打开FBSDKProfile.enableUpdates(onAccessTokenChange:true) github的:git@github.com:dan12411 / HelloFirebase.git

Swift 3.0课程笔记—关闭和搜索显示

主讲人:魏炜 关闭 Closure是没有名字的(func)函式 闭包在Swift是一个值,有型别,属参考类型 把函式写成Closure的步骤: 1.把名字删掉,存进一个变数 2.把参数和回传值放进大括号里面,加上关键字“ in” //功能// func addClosure(number1:Int,number2:Int)-> Int { 数字1 +数字2 返回结果 } //关闭// 让addClosure:(Int,Int)-> Int = { (数字1:整数,数字2:整数)->整数 令结果=数字1 +数字2 返回结果 } 闭包当当某函式的参数 闭包当当某函式的回传值 Closure既可回传值,还能把附近的值回传出去 封闭可以跟阵列配合使用 关闭简写步骤 如果已经知道参数跟回传值的型别的话,可以省略closure里的参数和型别 如果closure有回传值,而且程式码是一行的话,可以省略return 可以用$ 0或$ 1…等代表参数 如果closure是最后一个参数的话,可以把closure写在小括号外面 如果closure是唯一一个参数的话,可以省略小括号 ///筛选有文字“ o” 进口基金会 fruitArray.filter({ (水果:字符串)-> Bool in 返回fruit.contains(“ o”) }) ///省略版 fruitArray.filter {$ 0.contains(“ o”)} git@github.com:dan12411 […]

模仿Haskell的列表模式

阅读之前,请注意,无需具备Haskell或函数式编程的先验知识。 文章 最近,我一直在试验Haskell,尤其喜欢一种功能-列表模式匹配中的(x:xs),其中x是当前元素,即所谓的“ head”,而xs是其余元素列表,即所谓的“尾巴”。 下面是一个示例,其中包含提到的功能,即列表的长度方法: 话虽如此,我开始怀疑用另一种语言实现此功能是否有用。 下一个代码段是尝试在Swift中“模仿”它: 如您所见,这两种方法都是“ Array”类型的扩展。 我称之为第一个(因为无法给出更好的名称)递归,它返回一个由可选元素(称为x)组成的元组,而数组的其余部分称为xs。 X是可选的,因为在某个时候可能还没有实际的元素。 它的身体是不言自明的:self.first是当前的头,self.dropFirst将返回“尾巴”。 但是,dropFirst的返回类型是ArraySlice而不是Array,因此是map方法。 现在,在某种程度上模仿了Haskell的功能,可以实现它的长度。 一般情况是返回1加上当前“迭代”末尾使用长度的结果,请参见示例2,l。 9.上面两行是列表为空并返回0或head元素不存在的情况,这意味着它等于null并仅返回1。 尽管它的实现方式不如Haskell中的原始方法那么优雅,但它可以在某种程度上对我产生吸引力。 我自己,我真的没有看到像Swift这样的语言进行递归的优势,我的一些认识Swift的朋友也没有。 但是,这可能是一种吸引人的设计模式。

Swift中的功能组合

数学中一个非常有趣的概念是函数合成 ,正如名称所暗示的那样,它允许将两个函数合成。 用数学符号表示,可以写如下的方程式 f-> x:x * 3 g-> x:x + 4 h-> x:f。 G h(5)= 27 总结起来,这意味着放在组合函数中的x值将首先在右边服务该函数,并且其结果将用作左边函数的参数。 Haskell是一种可以充分利用后者的编程语言,下面是一个示例: 所以, 将返回13。 但是我们如何在Swift中实现函数组合呢? 让我们使用游乐场看看! 优先级组的唯一用途是使我们后面的“°”中缀运算符保持关联。 …函数的签名非常有趣,让我们来看一下。 我们有三种通用类型-T,U和V。我们的第一个参数f1接受一个函数,该函数接受U并返回V。但是,第二个参数f2接受一个函数,该函数接受T并返回U。我们的返回类型为一个函数本身,它采用T,因此为f2的自变量,并返回V,因此返回类型为1。这是正确的,考虑到如何在顶部解释函数的组成。 由于我们的返回类型将是一个函数,因此我们必须能够插入一个值,因此,我们是否必须使用闭包,这将说明返回后的花括号。 将要输入的值称为x,然后将我们的函数放在一起:f1取f2,x取x。 我们定义了以下两个函数,以便可以测试组成,最后一个表达式表明它有效。 我们完成了,看起来不是很优雅吗?

Swift编程入门第2部分—值类型,引用类型,指针和集合类型

之前,我们讨论过变量,常量和类型。 开始Swift编程第1部分-变量,常量和类型 我知道那里有很多教程,Apple有很好的学习Swift的资源,包括他们的WWDC视频…… medium.com 在这一部分中,我们将讨论几个特殊类型,但是为了深入实现这一点,我们必须首先讨论值类型,引用类型和指针。 提醒一句,指针可能是最难掌握的概念之一,我会尽力而为。 初步的东西 是的,我们上次这样做,现在我们将再次进行。 上一次我们讨论了内存以及它如何以块,字节和位的形式排列。 我想在这里对此进行扩展,并为您提供一些有关内存工作原理的直观表示。 让我们创建一个包含值Hello的字符串。 我们之前没有做过什么特别的事情。 我在上一篇文章中告诉您,内存具有价值。 如果我们可以看一下该内存,它将像这样存储: 我敢打赌,您要问的是\0在字符串的末尾。 这称为空终止符。 斜线表示程序已准备好执行命令,零表示没有任何意义。 这是字符串值的存储方式,并在字符串允许使用空格的同时让程序知道字符串何时完成。 数字略有不同。 数字存储为二进制数字。 二进制很容易理解,从内存块最右边的1开始,向左移动,每次将当前值乘以2。 如果您对图形卡或记忆棒有所了解,这就是为什么我们会看到8位(Atari,NES),16位(Sega Genesis,SNES),32位(PlayStation),64位(Nintendo 64)和以此类推。 在二进制中,如果位置为0,则表示关闭,这是错误的。 如果位置为1,则为开或为true。 基于此逻辑,我们只需要计算位置为1的位置即可。 您能找出上图中的数字吗? 现在,这是一组8位内存,是的,它是一个完整的内存字节。 之前我说过字符串中的每个字符都是2个字节,这意味着我们使用16位来存储字符。 16位二进制文​​件的最大值为256。但是,当我们谈论位置时,我们总是从0开始。因此16位二进制数的范围是0-255 。 我敢打赌,您在问我们如何才能使字符超出此范围。 好吧,在这种情况下,我将带您到ASCII表,您可以在其中查看自己的值。 您甚至还会看到隐藏的字符,例如空终止符/0如上所示。 内存将值存储在静态内存中,该位置称为stack ,而该位置称为堆。 可以快速访问静态内存和堆栈内存,但是从堆访问内容的速度很慢(以计算机时间计)。 尽管对您来说似乎并不慢,但从堆栈加载可能要花费一毫秒或更短的时间,而从堆加载可能要花费10毫秒。 在介绍事物时,我将解释它们的实现位置,以便您以后知道将其放置在何处。 值类型 值类型很容易学习,这就是我们自然地思考事物的方式。 当您描述某些事物时,例如说一个高尔夫球,您可能会说一个高尔夫球很小,或者一个篮球是橙色。 值类型是包含您要查找的值的内存。 如果您将值8存储在内存中,然后再要求输入该值,则会收到数字8,非常简单,对吧? 字符串,整数,双精度型,浮点型和布尔型都是值类型,还有更多,但是我们还没有涉及它们,到目前为止,我所有的例子都是值类型。 值类型存储在堆栈中。 如果在它们前面添加静态元素,那么它们会添加到静态内存中,而不仅仅是在各处都这样做,这会带来另一个问题,我将在后面讨论。 参考类型和指针 引用类型在某种程度上类似于值类型,因为它们可以为您提供与值类型相同的值,但它们可以为您提供更多的价值。 引用类型使用指针为您提供所需的值。 之所以要准备这么长的篇幅,主要是因为本节有保证。 如果您看一下C和Objective-C程序,您会发现到处都使用了指针,看起来像这样 集合类型 继续本部分的最后一部分。 […]

[程式语言] Swift简介

Swift,强大的开放程式语言,让人人创造杰出的App Apple Swift官网上的这段文字,会让人觉得只要是人,都可以写出一个杰出的App,然这段话所言不假,日本一位80几岁的阿嬷做到了,而且还上架到App Store!真是令人敬佩! 新闻连结&App Store上的“ hinadan” 60岁才接触电脑,日本81岁奶奶开发出iPhone游戏App |数位时代 日本一位81岁的奶奶,因退休后发现市面没有适合银发族的游戏App,60岁才开始接触电脑的她,决定自己学习程序语言,现在她设计的App已经在App Store上架。 www.bnext.com.tw 在App Store上的「hinadan」 阅读评论,比较客户评分,查看萤幕快照,并进一步了解“ hinadan”。下载“ hinadan”并在iPhone,iPad和iPod touch上尽享丰富功能。 itunes.apple.com 连阿嬷都会写App了,那么以我资讯背景的是否也理理所当然地要来深度学习了呢,刚好最近有幸拿到一台新的Macbook Pro,就决定了学习iOS App的开发,在网路上收寻了太多的教学资源,从变数宣告,进阶动画,AR Kit都有,而最后决定在Udemy上挑了三个课程来咀嚼咀嚼。 iOS 11和Swift 4-完整的iOS应用开发训练营 苹果手机编程-使用IOS11SWIFT4编写19个真实程序 深度浅出iPhone开发(使用Swift4) 在Udemy挑选课程主要可以由学生人数, 评论星等 , 课程大纲 …等等 ,而价格就不是在挑选课程中主要考虑的因素,因为只要Google一下Udemy优待码,实际上就是同类课程的价格都一样,重点是选择“自己需要的”! 接下来的会尝试发布一些学习Swift遇到的问题与解决的眉毛角角,从而做一个学习纪录,也好帮助自己这个健忘脑袋,避免忘记!

反对第三方依赖

“这不是每天的增加,而是每天的减少。 摆脱不必要的东西。” 李小龙(Jeet Kune Do)的道 介绍 请考虑以下情形:一群开发人员正在从头开始进行短期项目。 客户很着急,因此他们决定不重新发明轮子,而是使用人类尽可能多的外部依赖项。 发展的步伐是荒谬的。 几周后,吉拉(Jira)有许多封闭票。 真好 大家都很开心 几个月后,开发人员可以完全控制很多第三方依赖项,并且只有很少的代码。 几年后,有一个项目很难维护。 不再支持某些依赖项。 语言版本已更改,客户需要支付叉子维护费用。 哦,与此同时,这十七个外部框架之一存在一个小的安全问题…… 三个问题 第三方开源库很棒。 (通常)将它们抛光到可能的极限。 使用它们(通常)是一种乐趣。 (通常)它们是由比我聪明得多的人开发的,我对此非常赞赏。 Chapeau为那些将自己的时间花在使其他开发人员的生活变得更轻松的开发人员上而起。 但是,使用它们总是会带来一些风险-这可能是个问题。 如果不再支持该库怎么办? 您准备好承担维修货叉的费用了吗? 还是迁移到另一个解决方案并进行大规模重构会更便宜? 如果存在安全漏洞会怎样? 这不是一个不现实的场景-足以回顾流行的AFNetworking的情况。 添加第三方代码始终带来增加潜在的未检测到的漏洞的风险。 如果您的要求在几个月后发生变化,会发生什么? 您的项目在变化,第三方框架也在变化。 在某些时候,重叠的路径可能会明显分开。 您可能需要已经集成的第三方不提供的功能,或者以无法接受的方式提供的功能。 那你要怎么办 摘要 我不反对使用第三方库,我反对失去对代码的控制并承担不必要的风险。 在将另一个第三方依赖项添加到您的项目之前,请考虑是否确实必要。 想想如果它不再被支持会发生什么。 迁移到另一个解决方案或分叉维护的成本可能是多少。 不要误会我的意思-第三方代码不是万恶之源。 它很有用,有助于更快地交付产品并提高整体生产率。 所有这些都是在风险与收益之间取得平衡。 如果您决定使用第三方依赖关系,请使用适当的设计和合理的抽象层来保护自己。 就像古代的斯多葛式的一样-始终牢记最坏的情况。