在Swift中, 编译器不再支持预处理指令。作为替代,它使用编译时的属性和build配置
在 Xcode 中 Build Setting 界面, 搜索 flags , 最下面就是.
我们可以通过在不同的环境下设置不同的 Tag , 来控制版本.
可以使用 #if 判定build的参数动态编译
自定义Log
还有一种方式实现版本管理就是通过切换不同的Target. 这里在参考中有详解.
在 腾讯Bugly官网 登录账号, 注册应用. 获取到AppKey.
在 文档中心 , 查看具体使用
先讲讲Object-C的方案
那怎么分析呢?
小节:
在Swift中怎么拦截crash, 避免程序崩溃呢?
目前除了调用 try-catch 方法, 并无其他比较好的解决方案, 但是这也是只能拦截 Foundation 框架里面的 NSArray , NSString 这种类型的. 并不能处理Array, String这种结构体.
既然写到这里, 推荐一个大佬写的 Swift 框架 GodEye , 里面有一个 CrashEye , 就是通过NSSetUncaughtExceptionHandler 和 signal(SIGABRT, SignalHandler), 来处理异常, 但是无法避免崩溃, 具体我在 iOS崩溃日志 里有提到.
参考
最详细 Xcode的Targets管理项目的公开版本、测试版本、预发布版本等等
OC版LSSafeProtector
Swift版CrashEye
Swift是什么?Swift是苹果于WWDC 2014发布的编程语言,这里引用The Swift Programming Language的原话:
Swift is a new programming language for iOS and OS X apps that builds on the best of C and Objective-C, without the constraints of C compatibility. Swift adopts safe programming patterns and adds modern features to make programming easier, more flexible and more fun. Swift’s clean slate, backed by the mature and much-loved Cocoa and Cocoa Touch frameworks, is an opportunity to imagine how software development works. Swift is the first industrial-quality systems programming language that is as expressive and enjoyable as a scripting language.
简单的说:
Swift用来写iOS和OS X程序。(估计也不会支持其它屌丝系统)
Swift吸取了C和Objective-C的优点,且更加强大易用。
Swift可以使用现有的Cocoa和Cocoa Touch框架。
Swift兼具编译语言的高性能(Performance)和脚本语言的交互性(Interactive)。
Swift语言概览
基本概念
注:这一节的代码源自The Swift Programming Language中的A Swift Tour。
Hello, world
类似于脚本语言,下面的代码即是一个完整的Swift程序。
println("Hello, world")
变量与常量
Swift使用var声明变量,let声明常量
var myVariable = 42 myVariable = 50 let myConstant = 42
类型推导
Swift支持类型推导(Type Inference),所以上面的代码不需指定类型,如果需要指定类型:
let explicitDouble : Double = 70
Swift不支持隐式类型转换(Implicitly casting),所以下面的代码需要显式类型转换(Explicitly casting):
let label = "The width is " let width = 94 let width = label + String(width)
字符串格式化
Swift使用\(item)的形式进行字符串格式化:
let apples = 3 let oranges = 5 let appleSummary = "I have \(apples) apples." let appleSummary = "I have \(apples + oranges) pieces of fruit."
数组和字典
Swift使用[] *** 作符声明数组(array)和字典(dictionary):
var shoppingList = ["catfish", "water", "tulips", "blue paint"] shoppingList[1] = "bottle of water" var occupations = [ "Malcolm": "Captain", "Kaylee": "Mechanic", ] occupations["Jayne"] = "Public Relations"
一般使用初始化器(initializer)语法创建空数组和空字典:
let emptyArray = String[]() let emptyDictionary = Dictionary<String, Float>()
如果类型信息已知,则可以使用[]声明空数组,使用[:]声明空字典。
控制流
概览
Swift的条件语句包含if和switch,循环语句包含for-in、for、while和do-while,循环/判断条件不需要括号,但循环/判断体(body)必需括号:
let individualScores = [75, 43, 103, 87, 12] var teamScore = 0 for score in individualScores { if score >50 { teamScore += 3 } else { teamScore += 1 } }
可空类型
结合if和let,可以方便的处理可空变量(nullable variable)。对于空值,需要在类型声明后添加?显式标明该类型可空。
var optionalString: String? = "Hello" optionalString == nil var optionalName: String? = "John Appleseed" var gretting = "Hello!" if let name = optionalName { gretting = "Hello, \(name)" }
灵活的switch
Swift中的switch支持各种各样的比较 *** 作:
let vegetable = "red pepper" switch vegetable { case "celery": let vegetableComment = "Add some raisins and make ants on a log." case "cucumber", "watercress": let vegetableComment = "That would make a good tea sandwich." case let x where x.hasSuffix("pepper"): let vegetableComment = "Is it a spicy \(x)?" default: let vegetableComment = "Everything tastes good in soup." }
Swift中的断言与ObjectiveC中的断言有很多不一样的地方,使用起来差不多。
什么是断言?
断言通常是用于诊断条件是否满足,如果不能满足就会中断程序。使用assert函数来添加断言。
如果条件为真,那么就什么也不做,可以继续往下走。如果条件为假,那么就会抛出crash信息,程序中断退出。
assert函数的方法为:
对于此方法,我们有很多个缺省值的参数,因此我们也可以传我们自定义的参数。
Swift还提供了直接断言失败的API:
当前这个断言失败的API也可以传参数,指定错误信息。指定特定的错误信息,目的是让我们开发人员更精准地定位到出错的问题所在。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)