Swift代码中的嵌套命名法
Swift代码中的嵌套命名法Swift支持与其他类型嵌套命名,尽管它还没有专用的命名关键词。下面我们来看看,如何使用类型嵌套来优化我们代码的结构。 大多数Swift开发者习惯于用类型在结构上的实际名字累命名。例如:PostTextFormatterOption(一个Text Formatter类型的用于format Posts的Option)。这可能是因为我们在Objective-C & C中,养成的别无选择的可怕命名习惯,被我们带到了Swift里。 下面我们用上面提到的类型作为例子,来看下Post、PostTextFormatter以及PostTextFormatterOption的实现: 123456789101112131415161718192021222324252627struct Post { let id: Int let author: User let title: String let text: String}class PostTextFormatter { private le...
简单的Swift函数的依赖注入
简单的Swift函数的依赖注入本文是翻译,原文链接:Simple Swift dependency injection with functions 依赖注入是一种很好的解耦代码的手段,使代码变得易于测试。比起来对象自己创建自己的依赖,从外部注入,使得我们可以设置不同的场景————例如在生产中 vs 在测试中。 在Swift中,大多数时候,我们用协议来实现依赖注入。例如,我们写一个简单的卡片游戏,用Randomizer(随机性发生器)画一个随机的卡片,如下所示: 12345678910111213141516class CardGame { private let deck: Deck private let randomizer: Randomizer init(deck: Dec, randomizer: Randomizer = DefaultRandomizer()) { self.deck = deck self.randomizer = randomizer } func dr...
在Swift中使用构建者模式
在Swift中使用构建者模式和编程中其他的抽象和模式一样,构建者模式的目的是减少以保持可变状态——从而使对象更简单、且更容易预测。对象变得“少状态”,就会容易测试和调试——因为他们逻辑只存在单纯的输入输出。 尽管构建者模式在java中十分常见,然而在苹果平台上却很少遇到(至少和构建对象不同)。这周,我们来看一下,构建者
使用@autoclosure来设计Swift API
使用@autoclosure来设计Swift API此文是翻译原文链接:Using @autoclosure when designing Swift APIs Swift @autoclosure 属性用于在闭包中定义一个“被包裹”的参数。主要用于延迟执行一段(潜在的耗时、占资源大)代码到真正需要的时候,而不是在参数传递时就执行。 在Swift标准库中就有一个例子,Assert函数的使用。由于asserts仅仅在debug模式下触发,所以没必要在release模式下执行代码。这时就用到了@autoclosure: 1234567891011func assert(_ expression: @autoclosure() -> Bool, _ message: @autoclosure() -> String) { guard isDebug else { return } // Inside assert we can refer to expression as a norma...
关于沟通
关于沟通的反思中午回去休息的时候,突然发现自己上午说话好难听。 事情是,测试说我和安卓有个地方计算的不一样,然后要给我提Bug,然后我电脑当时正卡,本来就心情不太好,然后一听要给我提Bug,立马就炸了; 这个地方,最开始过需求的时候,产品都没有提到有这个东西;然后测试写测试用例的时候,提出来了,产品去确认了两三次才知道有这个东西,然后通知开发做,但是具体算的逻辑根本就没有说。 所以我立马就给怼回去了,让给产品提Bug,做个需求变更再做。早上晨会的时候,产品说自己说过,然后就吵起来了。事实是产品文档没写,也没说过这个东西,安卓做的时候,问测试要的另一个东西才这么早,也没告诉我。 我当时真的就炸了,感觉血液往脑袋上涌,就差动手了。 中午吃过去趴床上休息的时候,想想,发现自己完全能不生气,不嘲讽,好好的沟通,然后选择了一种让所有人都不舒服的方式;这固然是习惯使然,另一方面也是自己缺乏正确的沟通的表现。 沟通这个问题,我很早就注意到,知道正确的是什么,但是每次话脱口而出,然后就一发不可收拾。到最后,所有人都记得,我脾气不好,然后评其他东西的时候,就没人愿意帮。然后...
铃铛子简笔画训练营
绘画 2017.02.21上周脑袋一热,感觉自己平时没什么兴趣爱好,然后又看了一大段鸡汤文,然后一冲动,就报了简笔画训练营。。。。 没上课之前,以为会很简单,说不定我是绘画天才,以后出去,刷刷几下,画出来一个美女;上了课之后,发现纯粹是想多了😂 周四上的课,然后周末的时候,看着这工具,我到底是画呢,还是画呢,还是画呢,然后周末就没了。。。。。 周一突然发现我去,周末怎么没了?都周一了,周三前要交作业,赶紧画,话说,周四讲的什么?怎么不记得了,我的内心是这样的 然后赶紧翻记录,回顾一下,嗯嗯,就是这个,想起来了,是要先画个色卡哎,然后趴到桌子上,自己给笔写上标号,然后老老实实的涂色卡好不容易涂完了,想起来,还要把颜色标识出来,额,好吧,一个个来,这个是什么颜色,不认识,过!这个呢,也不认识,下一个!再来一个,黄色,好,写上,等等,后面有个看起来更像黄色,再后面还有,到底哪个是呢?我好方。。。。。 老师,其实我是色盲,[捂脸] 老实说,有了色卡却是很方便,尤其在临摹的时候,不知道老师用的颜色是哪个,对比色卡,找到最接近的对应编号的笔,然后上色,方便快捷 然后临摹一碗面,用铅笔画...
iOS 自动打包
iOS 自动打包使用脚本实现自动打包,网上搜了好多,但是偶比较笨,一直发现不知道怎么使用,看了好久,终于改了个可以使用的,但是最后发现不能用xcrun导出;宝宝心里苦,但宝宝不说😂;接着改,最后终于被我捣鼓成功了,分享给大家一下 Note: 只是简单的基础版本的,这个支持的是没有使用Cocoapods的工程,,脚本见iOS自动打包_shell脚本;如果是使用Cocoapods工程的,可以稍微修改一下,鼓励大家自己试试,试好了顺便分享给我,😉 使用方法: iOS自动打包-sh的使用:下载压缩包后,解压,里面有后缀为.sh的文件和.plist的文件,将这两个文件放到.xcodeproj所在的文件夹下,然后ProjectName和SchemeName,打开terminal,运行这个.sh文件即可。 然后来说一下调试中遇到的问题: 文件路径的问题 Scheme的问题,我不知道自己的sheme是什么?或者我的sheme明明就是这个但是提示我找不到 脚本运行完,发现所有的文件都变成Modified状态,整个人顿时就不好了。。。 问题一:路径的问题因为是shell脚本,偶会的本...
iOS开发之坑1
iOS开发之坑1iOS 10 之后,switch的setOn方法调用之后,并没有按照文档上说的不发送action https://stackoverflow.com/questions/39566361/uiswitch-seton-animated-does-not-work-as-document 遇到个诡异的问题,同样的创建view,然而在偶数列显示模糊,在奇数列正常
美剧推荐
美剧最近剧荒了,所以想让大家分享一点好看的美剧,我先来说一下自己喜欢的: 《lie to me》别对我说谎 《crimal minds》犯罪心理 《NCIS la》海军罪案调查处 洛杉矶 《Castle》灵书妙探 《警界金童》 《不死法医》 《White Collar》妙警贼探/猫鼠游戏 《基本演绎法》 《越界追踪》 lie to me 我始终觉得《lie to me》是我看过的美剧中令我印象最深刻的;Tim Roth一个人撑起了一部剧,总感觉他演的Dr. Lightman十分欠揍;里面的Emily十分有爱,有木有,比《Castle》里面的小a好看;还有Foster,不晓得为什么没和博士在一起;还有小哥,小哥感觉像是个受气包啊。。。。。。唯一可惜的是,只有三季 犯罪心理 犯罪心理是从05年开播的,到现在一共11季,12季也已经续订了;没看犯罪心理之前,我认为美国是个美好的国家,感觉以后如果出国,一定要去美国看看,看了这部剧之后,我勒个去,美国太危险了,这么多变态。。。。。。犯罪心理到现在一共11季,每季大概22集吧,每集一个变态,一共是。。。。刚开始看,整个人都不好了,...
半透明效果的实现
类似下图这样一个半透明效果的实现: 起因:我今天在推酷上面闲逛的时候,看到了这样一篇文章用 Swift 编写面向协议的视图,里面介绍的是一个颤动的效果,分别采用直接实现、category实现以及protocol extension实现,来表现swift面向协议的强大,推荐大家仔细看看。 在文章的末尾,附有一个链接,是透明视图控制器及背景遮罩,我点开看了一下,是一个采用protocol extension实现的类似图一的半透明的实现;只不过是swift的。 然后我仔细回想了一下,类似这种效果的需求在开发中不少,但是每次我实现都是自定义一个view然后用动画效果实现,现在想想这样不但繁琐,而且很low,有木有。 然后想想上面的那个实现,我把它翻译成OC的怎么样,能不能使用,OC里面是没有protocol extension的,那我就直接用category实现,至少比每次实现都重写方便。 then,here is the result. DimBackground-OC里面很简单,使用的时候只需要导入这两个文件,然后使用即可。 但是需要注意的是,要present出来的那个界面,这...