
From Android to Swift
本专栏从Android开发者的角度介绍Swift iOS,介绍Swift iOS开发的特点和常见问题,探讨Swift iOS开发的技术难点和发展趋势
offbye
西涛,全栈工程师,架构师,Android和HTML5专家。熟悉Java、Android、JavaScript、Python、Swift等技术。目前专注手机端侧人工智能研究,熟悉tensorflow
展开
-
iOS开发如何通过UMeng的错误分析解决crash问题
友盟统计有一个很适用的功能是错误分析,通过它我们可以看到App的一些crash错误,对于定位问题有帮助,那么如何根据这些错误日志解决bug呢?今天在友盟的错误分析里面找到了一个这样的错误:12345678910111213141516171819202122232425262728293031323334Application received signal SIGSEGV(null)( 0转载 2016-03-05 10:59:19 · 4012 阅读 · 0 评论 -
iOS swift动画和特效专题
今天看到一个不错的专题,分享下原文 http://liuyanwei.jumppo.com/2015/10/29/iOS-animation-0.htmliOS动画和特效(一)UIView动画和CoreAnimationiOS动画和特效(二)UIKit力学行为iOS动画和特效(三)MotionEffectsiOS动画和特效(四)controller间的自定义过渡效果iOS动画和特效(五)layer转载 2016-03-01 10:54:59 · 2608 阅读 · 0 评论 -
升级CocoaPods 1.0问题解决汇总
今晚发现CocoaPods 提示有1.0版本了,于是打算升级一下 CocoaPods 1.0.0 is available. To update use: gem install cocoapods结果就出现了下面的错误,分析了下原因是/usr/bin/xcodeproj目录路径错了,网上搜了下解决问题,使用sudo gem install -n /usr/local/bin cocoapods原创 2016-05-28 22:47:43 · 5360 阅读 · 0 评论 -
iOS 9开发小技巧:LayoutGuide,Storyboard Reference
前言"小黄鸭"法不仅适用于debug,也适用于学习新知识。表达是最好的吸收。本文原文发表在realm.io上。我翻译并整理成此文。希望可以为国内的iOS朋友提供一些资料。LayoutGuide在iOS9.0 和 OS X10.11中,分别有两个新的类:UILayoutGuide 和 NSLayoutGuide。他们可以作为一种类似View的对象,参与到AutoLayout的布局约束中。作为一种新的转载 2016-02-25 11:30:20 · 2095 阅读 · 0 评论 -
深入理解iOS开发中的BitCode功能
深入理解iOS开发中的BitCode功能字数3838 阅读336 评论3 喜欢9前言做iOS开发的朋友们都知道,目前最新的Xcode7,新建项目默认就打开了bitcode设置.而且大部分开发者都被这个突如其来的bitcode功能给坑过导致项目编译失败,而这些因为bitcode而编译失败的的项目都有一个共同点,就是链接了第三方二进制的库或者框架,而这些框架或者库恰好没有包含bitcode的东西(暂且转载 2016-03-01 19:32:30 · 2347 阅读 · 0 评论 -
Swift化零为整:Reduce 详解
即使早在 Swift 正式发布之前,iOS / Cocoa 开发者都可以使用诸如 ObjectiveSugar 或者 ReactiveCocoa 第三方库,实现类似map、flatMap 或 filter 等函数式编程的构建。而在 Swift 中,这些家伙(map 等几个函数)已经入驻成为「头等公民」了。比起标准的 for 循环,使用函数式编程有很多优势。它们通常能够更好地表达你的意图,减少代码的转载 2016-03-11 14:58:02 · 4735 阅读 · 0 评论 -
Xcode7.2版本carthage包管理器兼容问题解决
昨天尝试新的swift ios项目, 基于swift2.1, 运行时发现缺少一些swift开源库,项目是基于carthage构建的,于是使用carthage update 命令下载开源库,结果下载完运行Xcode发现报CPU架构方面的错误,错误如下:/Users/Documents/iOS/iOS-/Carthage/Checkouts/Alamofire/Source/Alamofire.h:2原创 2015-12-25 10:02:48 · 5031 阅读 · 3 评论 -
Swift iOS项目最佳实践汇总
最近准备开始一个Swift iOS项目,收集了一些国外Swift项目最佳实践的文章参考。http://www.raywenderlich.com/86477/introducing-ios-design-patterns-in-swift-part-1http://ios-blog.co.uk/tutorials/swift/developing-ios8-apps-using-swift-par原创 2016-01-14 18:30:28 · 2033 阅读 · 0 评论 -
理解Swift中Optional类型-有和无的哲学
原文连接:http://blog.barat.cc/ios/understanding-swift-optional/nil的遗憾当某个变量或表达式没有任何内容时,在Objective-C中可以使用nil来表示。nil在Objective-C中是一个「野孩子」,void指针指向数字 0,本质上来讲nil就是一个数字。来看看下面的代码在Objective-C会出现什么情况:int i = (int)转载 2016-01-20 09:39:16 · 2356 阅读 · 0 评论 -
iOS Swift判断代码运行在模拟器上
iOS模拟器有些功能没有,比如拍照,因此代码中需要加个模拟器判断,查了好多文章,终于找到了。swift代码如下:struct Platform { static let isSimulator: Bool = { var isSim = false #if arch(i386) || arch(x86_64) isSim = true原创 2016-02-18 15:28:42 · 5885 阅读 · 0 评论 -
Swift高阶函数介绍(闭包、Map、Filter、Reduce)
Swift语言有很多函数式编程的特性,常见的map,reduce,filter都有,初看和python差不多,下面简单介绍下闭包介绍:闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。假设我们需要两个函数,其中一个计算两个数的平方的平均值,另一个计算两个数的立方的平均值,传统的解决方法会是这样:代码func square(a:Float) -> Float { return a原创 2016-02-19 15:07:22 · 3683 阅读 · 2 评论 -
Swift iOS tableView static cell动态计算高度
TableView是iOS开发中常用的组件,有些表格因为UILabel包含的文本字数不一样,需要显示的高度也会不同,因此需要动态计算static cell的高度。我用的是static cell,注意每行的高度都需要指定,默认样式的cell高度是44,第三行(row == 2)进行了动态计算,第四行需要根据是否有内容判断是否显示,没有则返回高度0。根据实际尝试和查看国外文章,发现func table原创 2016-02-25 09:52:24 · 2844 阅读 · 1 评论 -
Swift - 多线程实现方式(3) - Grand Central Dispatch(GCD)
1,Swift继续使用Object-C原有的一套线程,包括三种多线程编程技术:(1)NSThread(2)Cocoa NSOperation(NSOperation和NSOperationQueue)(3)Grand Central Dispath(GCD)2,本文着重介绍Grand Central Dispath(GCD)GCD是Apple开发的一个多核编程的解决方法,基本概念就是dispatc转载 2016-02-26 11:24:10 · 2837 阅读 · 1 评论 -
Swift iOS项目archive操作会报错误built without full bitcode解决方法
Swift iOS项目集成阿里云和百度地图SDK时,archive操作会报下面的错误,原因是缺了相关的bitcode,详见参考文章。解决办法是在编译脚本增加配置 xcodebuild OTHER_CFLAGS="-fembed-bitcode" -target XXXX buildld: bitcode bundle could not be generated because '/Users/z原创 2016-02-29 16:29:05 · 6082 阅读 · 2 评论 -
理解Swift中map 和 flatMap对集合的作用
map和flatMap是函数式编程中常见的概念,python等语言中都有。借助于 map和flapMap 函数能够很轻易地将数组转换成另外一个新数组。map函数能够被数组调用,它接受一个闭包作为参数,作用于数组中的每个元素。闭包返回一个变换后的元素,接着将所有这些变换后的元素组成一个新的数组。简单的说, map就是映射函数,把一个集合映射成另一个集合。Swift的flatMap不容易理解,flat原创 2016-03-11 11:02:19 · 3729 阅读 · 0 评论 -
Swift2.1关键字 @noescape介绍
@noescape优化编译器编译,swift 2.1引入。函数如果有一个一个参数是closure的话,可以在前面加一个关键字@noescape表示在函数return前closure生命周期结束,可以优化编译。(closure 是引用类型, 可以引用到别的地方,如下:)class A{ var b: (Void -> Void)! func lalala(a: (Void->Voi原创 2016-03-11 11:12:45 · 2748 阅读 · 1 评论 -
Swift异常处理:throw和rethrow
Swift异常处理体现了函数式语言的特性,因此我们可以传一个会抛出异常的函数闭包(高阶函数)作为参数传到另一个函数中(父函数),父函数可以在子函数抛出异常时直接向上抛出异常,这时用rethrow关键字表示引用闭包时抛出的异常。throw关键字和Java一样,就是说调用这个函数本身可能会抛出异常。rethrow可以看作是throw的子集,Swift不把rethrow作为完整的类型。例如一个函数不能同原创 2016-03-15 19:00:03 · 6169 阅读 · 0 评论 -
使用swift开发Cordova插件
最近研究了用swift开发cordova插件的问题,事实证明用swift开发cordova插件是完全可行的,不要再去折腾烦人的oc代码了!主要参考了一个地理围栏插件 https://github.com/cowbell/cordova-plugin-geofence ,然后自己根据需求开发了百度地图标注和带扫描效果的二维码扫描iOS cordova插件,官方的那个实在太差了。用swift开发插件主原创 2016-04-15 15:55:06 · 2776 阅读 · 0 评论 -
Swift Modules for React Native
React Native is an Objective-C application framework that bridges JavaScript applications running in the JSCore JavaScript engine to iOS and Android native APIs.In theory, you write your application l转载 2016-04-22 18:20:13 · 3521 阅读 · 0 评论 -
从Java/Android到Swift iOS开发:语言与框架对比
我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还不够成熟没有正式发布。2016年初我们正式使用swift开发上线了销售助手App产品,积累了比较丰富的swift项目实战经验,开源框架都是用的swift版本,大量使用了面向协议和函数式编程。iOS App开发人员基本都是以前安卓版本的开发人员,同时维护安卓和iOS 2个版本,效率很高。 今天分享的主题是Java/Android开发人员如何快速上手Swift iOS开发。主要内容如下:原创 2016-05-04 10:48:41 · 5482 阅读 · 0 评论 -
iOS App沙盒模型文件目录详解Swift版
本文会比较全面的介绍iOS App沙盒模型的文件夹及其使用场景,以及通过swift取得这些文件夹的方法iOS 中的沙盒机制介绍iOS 中的沙盒机制(SandBox)是一种安全体系。每个 iOS 应用程序都有一个单独的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒。所有的非代码文件都要保存在此,例如属性文件 plist、文本文件、图像、图标、媒体资源等。iPhone沙箱模原创 2016-05-06 10:16:25 · 6985 阅读 · 0 评论 -
Swift iOS实现把PCM语音转成MP3格式
最近折腾了swift的语音录制识别和转码,这块还是比较坑的,由于语音识别的准确度实测大概也就80%左右,所以还是需要上传录音文件啊。首先是用讯飞语音SDK实现语音录制和识别(语音听写),第一个坑是讯飞SDK只录制了PCM格式的文件,这个文件是原始格式,默认比较大,另外播放器支持也不好,因此需要先把它转成mp3,本来考虑使用系统的AudioConverter转aac格式,不过aac好像不能在浏览器上原创 2016-05-05 18:46:33 · 6801 阅读 · 1 评论