Tumgik
yuxiangq · 9 years
Text
iOS实现判断程序关闭、用户关机的思路
最近在研究竞品的时候,发现其实现了检测APP是否关闭,用户是否关机的功能。当然我们知道以iOS的情况来说,是没有API能直接做到的。不过简单想了想,觉得利用多种方式配合,或许我们还是可以「判断」关机和APP关闭的。
APP使用心跳机制和服务器保持通信。
APP监听手机的网络状态变化,并将数据上传给服务器。
服务器定时利用Slient Remote Notifications判断APP是否有反应。
判断
服务器发现客户端心跳不正常,判断是否有网络异常状态,如果有网络异常状态则判断为「网络异常」。 如果没有网络异常状态,则向APP发送Slient Remote Notifications,如果APP没响应,则判断为「关机」。 如果有响应,则判断为「APP关闭」
0 notes
yuxiangq · 9 years
Text
《销售与客户关系管理》读书笔记(一)
最近因业务需要,在学习销售方面的知识,偶然之间得到《销售与客户关系管理》这本书,觉得好好的读一读。毕竟自己一直从事的是技术类工作,对于销售类工作着实一窍不通,所以先从理论上来认识「销售这件事儿」。
销售与客户关系管理的含义
销售人员的构成
从广义上理解的销售人员的类别包括:在组织市场上对公司、政府、非营利性的事业单位进行销售的销售代表;向消费者出售产品的各类售货员;为大客户提供系统解决方案,与其进行谈判、投标的销售团队中的各类谈判员;处于一线与客户直接沟通的销售人员;借助各种通信与现代IT技术从事网络销售、电话销售等人员。
销售与客户关系管理的含义
销售与客户关系管理是指销售人员通过向目标客户销售产品以及对其进行有效的管理,达到与外部客户与内部「客户」建立长期,甚至终身合同或业务关系与人际关系。
内部「客户」,即公司内部生产、技术、质量、供应等部门。销售也不能忽视或轻视内部「客户」。
销售人员的职责
制定销售计划。
销售产品与回收货款。
提供服务。
管理与巩固市场。
与客户建立长期的合作关系。
开发新市场。
公司形象与品牌的推广。
市场调研。
销售团队的合作。
向公司传达市场的信息。
争取公司内部非营销部门与人员的支持。
优秀销售人员的素质
普遍素质
冒险性、使命感、精力充沛、自信心强、强烈的金钱欲望、喜欢挑战。
复合型人才
精通产品、营销与沟通技巧的复合型人才。
「六心」
爱心、雄心、自信心、恒心、虚心和平常心。
树立「假如我是顾客」的思维模式
树立正确的顾客观。是顾客养活了企业,还是企业养活了顾客?这是销售人员必须首先要弄清楚的基本问题,也是建立「假如我是顾客」思维模式的基础。
销售的立场:顾客利益第一。向顾客销售产品时,是先想满足目标客户的需求并为其
「什么是顾客?顾客永远是本公司的座上宾,不管是在人员推销还是在邮购销售中,都是座上客。顾客并不依赖我们,而我们缺依赖顾客。顾客不是我们工作的障碍,而是我们工作的目标。我们并不因服务于他而对他有恩,他却因为给予我们为其服务的机会而有恩与我们。顾客不是我们要与之争辩和斗智的人。从未有人曾在与顾客的争辩中获胜。顾客是把他的欲望带给我们的人,因此我们的工作就是满足这些欲望,从而使他和我们都获得益处。」
树立「顾客永远正确」的经营理念,有如下好处。
有利于发现客户的新需求。
有利于调整销售策略。
有利于提升产品的竞争力。
有利于企业提高产品的质量标准。
有利于完善自己的经营。
0 notes
yuxiangq · 9 years
Text
WebAPP将迎来一个好时代
随着4G网络的普及,以及手机性能、浏览器性能的提升,WebAPP正迎来自己的时代。
想起2–3年前的时候,就有很多人在说WebAPP将崛起与NativeAPP平分秋色。但事实是WebAPP并没有真正占据一定份额。主要原因莫过于响应速度和体验远逊于NativeAPP,当然也有优化到极端的例子,效果可以说无限接近NativeAPP,但那毕竟是少数。大多数的WebAPP采用「JQueryMobile」、「SenchaTouch」等框架,在具体研发中遇到过的坑那是相当多,尝试过开发商业项目的童鞋应该心有余悸。
最近一年,4G网络的加紧推广及流量价格的降低,解决了WebAPP很大的一个短板,也让我们看到了WebAPP崛起的希望。其实移动网络的加速,对整个APP开发都是有益的,对于小团队来说,就不用将太多的精力投入到基础通讯的优化上。
0 notes
yuxiangq · 9 years
Text
近日招聘的一点感悟
这两周一直在忙着招聘的事情,同时也遇到一些有意思的人,这里想聊一聊。
我为什么要做程序员?
这或许是一个很「挫」问题,但是有多少人能认真的回答呢? 当然我并没有在面试中问到这个问题,只是在和他们的言谈中了解到,大多数人是很实在的 ——「这只是一份工作,我正好会这个,我能靠它赚钱,所以我做了程序员」。在这样的人眼中,我很难看到对工作的热情,但这是我评判的标准之一。我希望加入我团队的人,都是对程序员这份工作充满热情的人,
你最近在看什么技术相关的书籍?
这是我面试必问的一个问题,一来方便套近乎侃大山,二来可以了解面试者的自我学习意识。但是令我失望的是,目前为止我面试的所有人员,都告诉我「平时不看书,或者工作中需要的时候再去网上查查」。
这让我很震惊,程序员是一个需要不断学习的职业,而我们有很多程序员却不在业余时间花时间学习,这无疑让自己的职业生涯蒙上了一层阴影。
0 notes
yuxiangq · 9 years
Text
YXLabel — 允许点击指定文本UILabel
前几日在做产品新版的时候,有个类似微博评论的功能,Cell在上其中一个UILabel中需要显示「XXX回复YYY」,并且XXX和YY能够被点击。
我们了解到UILabel虽然能够支持点击事件,但是点击的时候UILabel是作为一个整体,不能区分点击的是XXX还是YYY。
当然我们能想到的简单解决办法为:使用三个UILabel,分别显示XXX 回复 YYY,这样便能很好的区分到底点击的是哪个文本,只是这样一点都不优雅。本着不重复造轮子的精神,开始在GitHub寻觅,希望能找到该需求的解决方案,遗憾的是只找到一个近似的解决方案PPLabel,看来还得造轮子。
查阅了PPLabel源码后,觉得稍加改动就能满足需求,于是便做了YXLabel,满足了上面的需求。主要算法都来自PPLabel,其中-(CFIndex)characterIndexAtPoint:(CGPoint)point方法是最重要的,通过点击的坐标(相对于UILabel)计算出点中了哪个字符,从而触发相关事件。不过在使用attributedText的时候,计算的字符位置那是相当不准,这还得好好研究一下。
2 notes · View notes
yuxiangq · 9 years
Text
手机是如何定位的?
我们目前了解到的手机定位方式,主要有四种:GPS、A-GPS、Wi-Fi、基站定位。
GPS
即全球定位系统,它是利用GPS定位卫星,在全球范围内实时进行定位、导航的系统。民用定位精度为10米左右,定位精度取决于上方遮盖物,周围环境,当地政策等。所以室内是无法使用GPS进行定位的。在空旷的地方GPS定位精度高于城市中。
优点:精度高、不依赖网络。
缺点:定位速度慢,因为GPS的使用需要搜索卫星,并且不同的设备,不同的环境搜索卫星的速度都会不一样。所以当需要快速定位,对位置精度要求不高的场景,GPS不是一个很好的选择。
关于手机GPS和车载GPS速度的比较: GPS定位的时候是需要通过卫星的位置、用户到卫星的距离来确定用户的位置。而卫星在运行时轨道不可避免的会产生误差和变动,这就需要用户使用最新的卫星轨道参数来求得卫星位置,卫星的这些参数叫做星历。GPS定位的快慢,和获取星历的快慢,有直接关系。 在有网络连接的情况下,手机可以从网络服务器下载星历,从而提高首次定位的速度(几秒到几十秒),而没有网络的时候,手机GPS只能像车载GPS一样从卫星上下载星历,传输速率低很多,首次定位时长增加到2-5分钟。 用户GPS设备,在长时间关闭(或丢失信号)后,星历可能发生较大变化,甚至完全不同,或者有些GPS设备没有关闭后存储星历的功能,就需要下载新的星历,这就是「冷启动」。而热启动就是短时间关闭或丢失信号之后再进行定位,星历可能只需要略加变动或没有变动,不需要花大量的时间下载星历,可以直接用存储的星历进行解算。
A-GPS(Assisted GPS)
A-GPS(Assisted GPS:辅助全球卫星定位系统)是结合GSM/GPRS与传统卫星定位,利用基地台代送辅助卫星信息,以缩减GPS芯片获取卫星信号的延迟时间,受遮盖的室内也能借基地台讯号弥补,减轻GPS芯片对卫星的依赖度。简而言之,就是有网络辅助的GPS。
A-GPS解决方案的优势主要在其定位精度上,在室外等空旷地区,其精度在正常的GPS工作环境下,可达10米左右,堪称目前定位精度最高的一种定位技术。该技术的另一优点为:首次捕获GPS信号的时间一般仅需几秒,不像GPS的首次捕获时间可能要2~3分钟。
优点:定位速度快、精度高。
缺点:不支持室内定位、依赖网络。
Wi-Fi定位
Wi-Fi定位的原理并不是很多人想的那样依靠IP地址定位,它实际是利用Wi-Fi信号来定位。当你的手机能收到某个Wi-Fi信号时,手机就会去服务器查找这个Wi-Fi信号的位置,然后再通过Wi-Fi信号强度进行纠正。比如在iOS中,系统就会提示用户,开启Wi-Fi以便获取更精确的位置信息。
关于Wi-Fi信息的采集,Apple会使用专门的采集车,沿街道扫描Wi-Fi信号,并将Wi-Fi信号的强度、经纬度等相关信息上传到服务器。同时当我们的手机连接到某个Wi-F时i,手机系统也会记录下该Wi-Fi的相关信息,并尝试获取经纬度(例如通过基站定位)然后将其上传。百度地图、谷歌地图等地图相关的APP,差不多都有这样的采集措施。
优点:可室内定位,速度较快,定位精度较高、不依赖网络。 缺点:定位精度稳定性不高
基站定位
基站定位技术一般应用于手机,它是通过电信移动运营商的网络(如GSM网)获取移动终端用户的位置信息的技术。 基站定位的大致原理为:移动电话测量不同基站的下行导频信号,得到不同基站下行导频的TOA(Time of Arrival,到达时刻)或TDOA(Time Difference of Arrival,到达时间差),根据该测量结果并结合基站的坐标,一般采用三角公式估算法,就能够算出移动电话的位置。实际的位置估计算法要考虑多基站(3个或3个以上)定位的情况,一般而言,附近基站数目越多,定位精度越高。
优点:可以室内定位,定位速度快、不依赖网络。
缺点:定位精度受基站覆盖率影响,定位精度不稳定。
0 notes
yuxiangq · 9 years
Text
Swift学习笔记(七)
关于Swfit中的构造器
构造器其实就是我们在其他语言中常说的构造函数。
与Objective-C中构造函数不同的是,Swfit的构造器无需返回值,它们的主要任务是保证新实例在第一次使用前完成正确的初始化(这个初始化过程包括为实例中属性值设置初始值等)。
当你为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的,不会触发任何属性观测器(property observers)。
构造器的最简形式类似于一个不带任何参数的实例方法,以关键字init命名,例如:
//在这里我们定义一个结构体 struct test{ var testNum:Double init(){ testNum=1.1 } } //该结构体定义了一个不带参数的构造器,并且将属性testNum的值设置为1.1。
你也可以在定义构造器时提供构造参数,为其提供定制化构造所需值的类型和名字。构造器参数的功能和语法跟函数和方法参数相同,例如:
struct test{ var testNum:Double init(fromTestNum t:Double){ testNum=t } }
跟函数和方法参数相同,构造参数也存在一个在构造器内部使用的参数名字和一个在调用构造器时使用的外部参数名字。然而,构造器并不像函数和方法那样在括号前有一个可辨别的名字。所以在调用构造器时,主要通过构造器中的参数名和类型来确定需要调用的构造器。正因为参数如此重要,如果你在定义构造器时没有提供参数的外部名字,Swift 会为每个构造器的参数自动生成一个跟内部名字相同的外部名,就相当于在每个构造参数之前加了一个哈希符号。
0 notes
yuxiangq · 9 years
Text
自定义UITableViewCell,使用VFL布局
自定义UITableViewCell自动布局的文章网上又挺多的,但是大部分都是采用的xib进行布局,所以这一块其实水挺深的。经过自己的实践和不断的查找资料,终于实现了使用纯VFL布局,实现方式在这里和大家一起分享一下,Demo比较简单
首先我们新建一个工程,命名为CustomCellWithVFLDemo,如下图所示:
Tumblr media Tumblr media
让我们的ViewController继承UITableViewController。继承UITableViewController能帮我们省不少事情。
Tumblr media
新建CustomCell,我们在其中新建一个UILabel,叫contentLabel,用于展示文本数据并允许换行。
为contentLabel设置约束,这里我们的约束可以看做Margin(5,5,5,5)。
在ViewController中添加一个原型cell,动态计算高度的时候使用。
涉及换行的UILabel,请一定要注意**preferredMaxLayoutWidth**属性的设置,否则换行会出问题。
0 notes
yuxiangq · 10 years
Text
春节小记
春节去了趟重庆。说来惭愧,我虽然出生在重庆地界,但是却一直没有去过主城区,这次决定去「见识」一下。
交通
重庆的交通也不怎么好,刚到重庆绕城高速口,就见出城的车排着长长的队。所幸的是入城这边倒挺顺畅。进入城区后也是慢慢的挪,城区道路起伏较大,经常需要坡道起步。像我这样的驾驶新手,在重庆开车实在是挺危���的。
公交车和成都相比,座位数挺多的,有点大巴的感觉。出租车就显得比较小家子气了,也挺破旧的。
没有去坐坐轻轨,挺遗憾的。
饮食
来了重庆一定要尝的是老火锅。这次吃的是住处附近的「地瓜老火锅」,味道挺不错的,尤其是鸭肠。还试了一下朋友推荐的重庆特色——老肉片。挺厚实的,不过个人不是很喜欢。挺遗憾的是没有去尝尝重庆小面,下次有机会一定要去试试。
住宿
这次住在亲戚家,听说重庆的房屋买卖的时候,说的面积都是建筑面积,这实在是很厚道。
在重庆期间我还将「英雄传说6:空之轨迹FC」打通了。不得不说剧情实在是太赞了,不可多得的好游戏。貌似这也是我近2–3年来唯一打穿的游戏,现在攻略SC中。
《iOS开发进阶》这本书也一直带在身上,不过只看了一章,实在是很惭愧。
0 notes
yuxiangq · 10 years
Text
Swift学习笔记(六)
Swift中的枚举拥有很棒的特性,至少以前我是没有接触过的。
枚举语法
使用enum关键字,并将其整个定义放在大括号内:
enum demo{ //定义枚举相关类容 }
假设我们定义指南针的四个方向:
enum CompassPoint { case North case South case East case West }
一个枚举中被定义的值是枚举的成员值(或者成员)。 case关键字表明新的一样关键字被定义。
多个成员值也可以出现在同一行上,用逗号隔开:
enum CompassPoint { case North,South,East,West }
//使用方法 var directionToHead = CompassPoint.West directionToHead = .North
注意: 不像 C 和 Objective-C 一样,Swift 的枚举成员在被创建时不会被赋予一个默认的整数值。在上面的CompassPoints例子中,North,South,East和West不是隐式的等于0,1,2和3。相反的,这些不同的枚举成员在CompassPoint的一种显示定义中拥有各自不同的值。
相关值
Swift的枚举可以存储任何类型的相关值,如果需要的话每个成员的数据类型是可以不同的。
比如我们可以定义两种商品条码的枚举:
enum Barcode { case UPCA(Int, Int, Int) case QRCode(String) }
然后可以使用任何一种条码类型创建新的条码:
var productBarcode = Barcode.UPCA(8, 85909_51226, 3) productBarcode = .QRCode(“ABCDEFGHIJKLMNOP”) //使用Switch-case switch productBarcode { case .UPCA(let numberSystem, let identifier, let check): println(“UPC-A with value of (numberSystem), (identifier), (check).”) case .QRCode(let productCode): println(“QR code with value of (productCode).”) }
原始值
作为相关值的替代,枚举成员可以被默认值(称为原始值)预先填充,其中这些原始值具有相同的类型。
这是一个枚举成员存储原始ASCII的例子:
enum ASCIIControlCharacter: Character { case Tab = “\t” case LineFeed = “\n” case CarriageReturn = “\r” }
原始值可以是字符串,字符,或者任何整型值或浮点型值。每个原始值在它的枚举声明中必须是唯一的。当整型值被用于原始值,如果其他枚举成员没有值时,它们会自动递增。
0 notes
yuxiangq · 10 years
Text
Pocket、Instapaper、Readability的比较
在接触「稍后读」软件之前,我一直是使用Evernote来保存暂时无法阅读的文章。
大概是在两年前,我使用了第一款稍后读类的软件。当时自己入手了一台TouchPad(现在想起来相当后悔没有入手iPad啊),刷成Android后主要用来看电子书和新闻,还用它在公司内部分享上查看演讲提纲(逼格很高啊)。这款APP是由原淘宝工程师开发的一款软件,叫uDee云阅读。貌似已经挂了,官网已经变成建站系统了o(╯□╰)o。相关的介绍可以看这里36kr关于uDee云阅读的介绍。
后来我入手了The New iPad,TouchPad就送给老爸看电影了。在iOS上我开始使用Pocket,那个时候还叫Read it later。用了一段时间后发现Pocket对CocoaChina支持不是很好,只能抓取到标题,查看内容的时候还得跳转到原网页,实在是麻烦,于是开始寻找其他类似产品。
某天在朋友手机上看到Instapaper,于是果断收了它(当时还是收费的),完美支持CocoaChina,而且Instapaper的图标也比Pocket好看,所以开始同时使用二者,Pocket主力,Instapaper辅助。
不久入了Reeder,配合着两大神器,让我阅读了不少好文。但是Reeder也无法完整显示CocoaChina的内容,每次阅读的时候我都要先保存到Instapaper,实在是麻烦。后来无意中点了一下内容上方的小板凳图标,发现竟然将内容完整的显示出来了。后来知道了那是Readability,果断入手。
于是三大稍后读神器都被我凑齐了。用了一段时间后有些感悟,想和大家一起分享。
Pocket
我用得最久的稍后读类APP。 支持Chrome插件,通过插件保存网页。
Tumblr media
文章列表界面清爽简洁,是我喜欢的风格。在列表界面提供搜索栏,很方便。
Tumblr media
软件的层级架构采用抽屉式结构,给了内容更多的展示空间。同时设置里面提供深色主题,方便夜晚阅读。唯一的遗憾是主题颜色不支持自动切换。
Tumblr media
Web端配色和APP保持一致,简洁不失优雅。并且Web端提供平铺和列表两种展示方式。
Tumblr media
Pocket也是三款软件中唯一有Mac客户端的。
Instapaper
个人认为是最精致的稍后读类APP。利用JS脚本保存内容,不支持浏览器插件。需要占用一个标签栏位置,这是让我很不爽的地方。
Tumblr media
文章列表简洁,整个界面更偏平,可惜的是不支持搜索。
Tumblr media
菜单仍然是抽屉式结构,搜索功能隐藏在了这里。其他东西和Pocket大同小异。同时支持深色主题(目前包含四款主题),更令人欣喜的是,Instapaper可以根据您的位置(需要用到GPS)和日落时间,自动调整主题的颜色。这真的是非常棒的功能。
Tumblr media
Web端的整体布局和APP差异不大,唯一的变化是将搜索栏放到了列表上。
Readability
我的感觉是抓取能力最强的了,但是界面不讨个人喜欢。支持Chrome插件。
Tumblr media
支持搜索及分类,较Instapaper和Pocket都更强大,可以说是结合了二者的有点。
Tumblr media
同样是抽屉式侧拉菜单o(╯□╰)o,非常简洁,另外我不是很喜欢那种全红的背景。
Tumblr media
整体布局和APP类似,可惜的是没有了搜索功能。
PS:以上就是我使用了三款APP后的一些浅薄看法。其实说起来它们对于我来说,都有一个很致命的缺点。就是对于代码块的处理都不尽如人意。本来文章中排版很舒服的代码,经过它们处理后就和普通文本混杂在一起,实在是一件很头痛的事情,希望能有一款稍后读类的APP能针对程序员定制。
0 notes
yuxiangq · 10 years
Text
NumberTextField
NumberTextField
这是我做的一个只能输入数字的控件。 可以限制输入的数字长度及小数点位数。
使用方法
特性
去除数字前多余的0。例如,输入000123,当控件失去焦点,或者通过text获取值的时候,数字会被处理为123。
Tumblr media Tumblr media
小数自动补0。例如,输入.123,当控件失去焦点,或者通过text获取值的时候,数字会处理为0.123。
Tumblr media Tumblr media
函数
-(NSString*)trimText;
调用该函数可以直接获取经过处理的数字。
0 notes
yuxiangq · 10 years
Text
我的2014总结
2014已经结束了,在这元旦假期的最后一天,就让我来总结一下自己去年技术上的收获及见闻。
iOS
去年我的主要角色是整个团队的iOS工程师及技术总负责人。当然同时还会兼职产品经理,运维等其他角色o(╯□╰)o。
VFL
首先是学会使用了VFL,真是布局神器,强烈推荐。为此我将产品中大部分的布局都使用VFL进行了重写。这感觉,谁用谁知道。
ARC
今年初的时候产品不再支持iOS4(我的决定_),于是启用了ARC。这感觉,谁用谁知道
Github
在上面发现了不少优秀的代码,自己也参与了一些。这才是程序员的SNS。
XHImageViewer
一个图片查看控件,支持图片缩放。我为其添加了Block支持。目前正在研究用其查看超大图片。
AFNetworking
将产品的网络请求全部替换为AFNetworking 2.0,因为前期对网络请求层进行了一次封装,所以替换起来很顺利。
NumberTextField
自己写的一个只允许输入数字的控件,在新的一年中还需要将其完善。
CocoaPods
一个优秀的第三方库管理工具,今年初的时候产品的大部分第三方库已经用其管理。
Alfred
Mac下的优秀的快速启动工具,目前我已经是它的重度用户。配合workflow,实在是神器。自己也在用Python为其编写插件。
Swift
有条不紊的学习中,因为自己对C#的熟悉,所以很多Swift的新特性个人感觉并不是很惊艳。
.Net
去年写.Net的时间较少,更多的是在技术大方向上的把握。
WebAPI
一直在计划将服务器框架由WCF替换为WebAPI,在年中的时候进行了框架搭建,可惜的是因为产品功能迭代较快,没有时间完成框架替换。
Nuget
在新服务器工程中使用的引用管理工具。
Dapper
一个轻量级高效率的ORM框架,重要的是针对MySQL的支持同样优秀。相较于EF的繁琐,对于习惯使用ADO.NET的朋友来说,该框架实在是太合适了。
阅读
14年阅读了挺多经典的书籍,还有部分书没来得及读。除了技术相关书籍还读了部分马伯庸的小说,真的非常好。
Effective Objective-C 2.0
一本很棒的书,讲了很多有关Objective-C的技巧,不过翻译挺烂的。
文明之光
吴军老师的书,作为一名IT工作者,开阔的视野是必不可少的,推荐阅读。
ASP.NET Web API 2框架揭秘
讲解WebAPI的书,目前主要当词典用。
菊与刀
从美国人的角度来看日本的书。
死于技术:索尼衰亡启示
索尼确实已经衰落了,卖掉了经典的VAIO,这本书全面的剖析了索尼衰落的原因。
0 notes
yuxiangq · 10 years
Text
Swift学习笔记(五)
函数的定义及调用
我们使用func关键字来定义函数:
func test( / * 这里是函数参数,通常如此定义 parameter:String * / )->String{ return “test” }
test() //调用函数
默认参数值
给函数的参数定义默认值的方式和C#是一样的:
func test(s:string= “defaultValue”)->String { return s;//如果s没有传值,则会返回defaultValue }
可变参数
用来输入不确定数量的参数,但是参数的类型必须一致:
func test(numbers:Double…)->Double { var total: Double = 0 for number in numbers { total += number } return total }
注意:一个函数至多能有一个可变参数,而且它必须是参数表中最后的一个。这样做是为了避免函数调用时出现歧义。
常量参数和变量参数
这是要注意的是,函数中默认的参数为常量参数是不可以被重新赋值的。变量参数则需要显示定义。
func test(s:String)->String{ s=“test” //这里会报错,参数s为常量参数,不能被重新赋值 return s }
func test(/ * 显示定位为变量 * /var s:String)->String{ s=“test” //正常 return s }
注意: 对变量参数所进行的修改在函数调用结束后便消失了,并且对于函数体外是不可见的。变量参数仅仅存在于函数调用的生命周期中。
输入输出参数
这个和C#中的ref,out是类似的。如果你需要一个参数能在函数体内被修改,并且在函数调用结束后修改仍然存在,就需要使用inout关键字来定义参数。
//交换两个变量的值 func swapTwoInts(inout a: Int, inout b: Int) { let temporaryA = a a = b b = temporaryA }
函数类型
函数其实就是C#中的委托类型,也就是我们所说的函数指针。当然它相较于函数指针是类型安全的。
func addTwoInts(a: Int, b: Int) -> Int { return a + b }
var mathFunction: (Int, Int) -> Int = addTwoInts //mathFunction就是指向addTowInts函数的变量
如果我们要用一个变量来表示addTowInts这个函数,那么这个变量的类型就是(Int, Int) -> Int,可以读作“这个函数类型,它有两个 Int 型的参数并返回一个 Int 型的值。”。 函数类型也是可以作为函数参数或函数返回值的。
嵌套函数
默认情况下,嵌套函数是对外界不可见的,但是可以被他们封闭函数(enclosing function)来调用。一个封闭函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。
0 notes
yuxiangq · 10 years
Text
Near Lock,一款有趣的应用
今天发现了一款有趣的应用,名字叫Near Lock。它有Mac版和iPhone版,二者是配合使用的。
它能让我们优雅的通过iPhone来解锁Mac。你只需要将iPhone带在身上,当你靠近自己的Mac的时候,它就是解锁状态,当你离开Mac的时候它又会自动锁上。
Pro版在中国区市场是25块,它能在后台运行。
经过我的体验,距离设置在2米左右比较合适。如果使用默认的1米,当手机刚连接上的时候,蓝牙测距不是很稳定,会在1米 ~ 2米直接跳动,导致一会儿锁屏,一会儿解锁。另外如果离开电脑时间较长再回来的话,蓝牙连接有很大的几率连接不上,希望以后的版本会有所改进。总的来说还是一款很不错的软件。
0 notes
yuxiangq · 10 years
Text
UICollectionViewController的用法
UICollectionView和UICollectionViewController是iOS6中新增加的控件,主要用于复杂的布局。你可以简单的把它理解为Grid。 在最近的版本中,我在做表单界面的时候,放弃了UITableViewController,改用UICollectionViewController来进行布局,个人感觉挺好用的,在这里我简单给大家分享一下UICollectionViewController的用法。
首先请大家注意的是,记得为UICollectionView的collectionViewLayout属性设置UICollectionViewLayout的子类。否则是会报错的。
UICollectionView的使用方式与UITableView相比没有什么区别,都是DataSource为View提供数据源,告诉View要显示什么东西以及如何显示他们,Delegate提供一些样式的小细节及用户交互的响应。
初始化UICollectionView UICollectionViewDataSource回调方法 以上三个方法都是UICollectionViewDataSource的基本方法,这些方法在UITableViewDataSource中也是有的,所以使用起来难度不大。 另外我们需要注意的是控制Cell尺寸的方法并不在UIcollectionViewDelegate的回调中,而是在UICollectionViewDelegateFlowLayout中
- (CGSize)collectionView:(UICollectionView * )collectionView layout:(UICollectionViewLayout* )collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath * )indexPath;
关于UICollectionView中的Supplementary Views和Decoration Views我还没有用到。目前了解到的是Supplementary Views类似UITableView中的Header和Footer。Decoration Views用作背景展示。 因为UICollectionView比UITableView复杂得多,所以它的布局样式并不是通过Style来改变,而是通过UICollectionViewLayout,这也是UICollectionView的精髓所在。
0 notes
yuxiangq · 10 years
Text
关于如何学习一门新语言
作为一名程序员,我们肯定会在必要的时候学习一门新的编程语言,这个时候好的学习方法会帮助我们节省很多时间,在这里谈谈我的学习方法。
快速了解语法
我通常会快速了解该门语言的语法,并将其和已学会的语言进行比较。比如我在学习Objective-C的时候就是将其和C#进行比较,思考两者的差异。 C#中的委托,在Objective-C中有什么可以实现? C#中的泛型,Objective-C中有吗? 如何实现单例? C#中的拉姆达表达式,Objective-C有吗? 等等,等等。
写Demo练习
实际的练习也是必不可少的。可以通过很多小项目和算法来练习自己对新语言掌握的程度。比如写一个简单的计算器。
经历了以上两部分,我们就能较好的在实际项目中使用新语言了。
0 notes