HelloSwift!Appdelegate的⽣命周期以及变量定义Hello!
很开⼼⾃⼰接受了这个事情,开始了Swift的学习.所以,想记下来,⾃⼰慢慢前进的每⼀⼩步!
⾸先:保证⾃⼰的Xcode是6.0以上的版本<;只要能新建Swift项⽬就⾏哈,嘻嘻>
然后新建:HelloSwift项⽬
⼤概最后就是这样:
然后就开始说明这个Appdelegate的⽣命周期
在说⽣命周期之前,先普及⼀下func和println了
func是⽤来定义函数所⽤的,当然了,println是⽤来输出显⽰的,本来是加在注释中的,此处提出了明⽰⼀下下:
/**
* 说明:
* swift中的函数命名是采⽤func来命名的,这跟OC有了很⼤区别
1.override func 这个是重写⽗类的函数
2.如果想要⾃定义⾏数,就只需要这样即可:func saySwift(){}
3.如果想要穿参,那么需要这样: func saySwift(personName: String)(){}
传⼊的是⼀个字符串类型的变量,名为:personName
4.如果想要返回值,那么就这样: func saySwift(personName: String) -> String(){}
那么这样的话,就需要返回⼀个String类型的值
println("hello,swift!") 后⾯没有跟着冒号,不会报错。
println("hello,swift!") 和 println("hello,swift!");
表达意义是相同的。
但是苹果推荐开发者使⽤ println("hello,swift!") 开发者⽂档中都是这样使⽤
所以,不要见怪
*/
这个⽣命周期跟⽤OC建⽴iOS项⽬以及和Android的Application都类似:
启动->前台->切换到后台->前台等等,⽆疑就是这些,如下:
//
// AppDelegate.swift
// HelloSwift
//
// Created by NapoleonBai on 14-11-10.
// Copyright (c) 2014年 NapoleonBai. All rights reserved.
//
import UIKit
import CoreData
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//点击launcher之后执⾏的函数<first>
println("application======>")
return true
}
func applicationWillResignActive(application: UIApplication) {
println("applicationWillResignActive===>")
//准备进⼊后台<third>,可以使⽤这个⽅法来暂停任务,⽐如:暂停游戏等,发⽣场景:<;电话/短信来临或者⽤户退出程序等等>
}
func applicationDidEnterBackground(application: UIApplication) {
println("applicationDidEnterBackground===>")
//进⼊后台执⾏此函数可以在这个⽅法中保存⽤户数据,释放资源共享等等,主要可⽤作节省内存,存储⽤户信息
}
func applicationWillEnterForeground(application: UIApplication) {
//从后台开始/将要进⼊前台<;变成活动状态,此函数执⾏在applicationDidBecomeActive函数之前,可以理解为转变的过渡>,当然,这个函数可以读取保存的信息等 println("applicationWillEnterForeground===>")
}
func applicationDidBecomeActive(application: UIApplication) {
//进⼊前台执⾏的函数<second>(当然,如果是从后台重新打开应⽤,那么将这样执⾏applicationWillEnterForeground->applicationDidBecomeActive)
//此函数可⽤于刷新界⾯等等
println("applicationDidBecomeActive===>")
}
func applicationWillTerminate(application: UIApplication) {
println("applicationWillTerminate===>")
//此函数调⽤的时候,说明当前应⽤程序即将终⽌,亦作崩溃
self.saveContext()
}
// MARK: - Core Data Saving support
func saveContext () {
if let moc = self.managedObjectContext {
var error: NSError? = nil
if moc.hasChanges && !moc.save(&error) {
//在此处可以适当处理错误
//但此函数会⽣成程序运⾏log,在发布程序的时候最好不要使⽤
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be us NSLog("Unresolved error \(error), \(error!.userInfo)")
abort()
}
}
}
}
很多需要说明的都加在了代码中,当然,这⾥给出了常⽤的⼏个⽅法,同时也是很重要的⽣命周期crash是什么意思
当我们点击launcher后,会这样执⾏:
到了applicationDidBecomeActive⽅法时,我们的应⽤程序就在前台运⾏了,此时点击Home键,那么程序将退出到后台,将是这样:
当applicationDidEnterBackground⽅法执⾏完毕的时候,说明程序已经完全处于后台,当然了,我们可以在这些⽅法中进⾏数据保存之类的操
作.然后我们⼜回到程序:
⼜看到了执⾏applicationDidBecomeActive⽅法,说明已经完成处于前台运⾏状态.当然了,appdelegate的⽣命周期就是这样,没有多么的复
杂,当然,代码中也提到了其他的⽅法,主要是程序终⽌的时候,抛出的异常Log 这些,是否进⾏处理,这个也只是在开发阶段使⽤的这些.不过,根据
个⼈需要所采⽤即可.
也给出appdelegate中的其他⽅法:
// MARK: - Core Data stack
lazy var applicationDocumentsDirectory: NSURL = {
// The directory the application uses to store the Core Data store file. This code uses a directory named "com.napoleonbai.ios.HelloSwift" in the application's let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
return unt-1] as NSURL
}()
lazy var managedObjectModel: NSManagedObjectModel = {
// The managed object model for the application. This property is not optional. It is a fatal error for the application not to be able to find and load its model.
let modelURL = NSBundle.mainBundle().URLForResource("HelloSwift", withExtension: "momd")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = {
// The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it. T // Create the coordinator and store
var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectMo
del: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("HelloSwift.sqlite")
var error: NSError? = nil
var failureReason = "There was an error creating or loading the application's saved data."
if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error) == nil {
coordinator = nil
// Report any error we got.
let dict = NSMutableDictionary()
dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
dict[NSLocalizedFailureReasonErrorKey] = failureReason
dict[NSUnderlyingErrorKey] = error
error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
// Replace this with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be usefu NSLog("Unresolved error \(error), \(error!.userInfo)")
abort()
}
return coordinator
}()
lazy var managedObjectContext: NSManagedObjectContext? = {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is opti let coordinator = self.persistentStoreCoordinator
if coordinator == nil {
return nil
}
var managedObjectContext = NSManagedObjectContext()
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()
这些⽅法⽬前我也不太清楚有什么⽤处,因为才起步,所以慢慢学了,望见谅.
开启另外的主题:进⼊我们的变量.常量定义了.
⾸先进⼊我们的ViewController(忘了介绍,这个还是同之前的项⽬⼀样,没有什么太⼤变化,在项⽬⼯程中,也多了⼀个LaunchScreen.xib,这
个就是之前的缓存信息界⾯,也就是启动应⽤之后显⽰的那个界⾯,main.storyboard还是原先的故事版,⽤于布局)
切⼊正题:
此段直接上code,因为在写的时候,⼩编已经很仔细的写下了注释了,嘻嘻
//
// ViewController.swift
// ViewController.swift
// HelloSwift
//
// Created by NapoleonBai on 14-11-10.
// Copyright (c) 2014年 NapoleonBai. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.managerDatas();
// Do any additional setup after loading the view, typically from a nib.
}
/**
创建的⼀个管理数据的函数,主要⽤于测试
*/
func managerDatas(){
/
*
*说明:
跟OC中的不⼀样
swift采⽤var和let来定义变量和常量
1.var 是 variable的缩写形式,是变量的意思,是可改变的,并不是数据类型
2.let 是常量的意思,不可改变的
*/
//So,那么我们想要定义⼀个int型或者float型的变量我们怎么办呢?
/*
整型 Int
浮点类型 Float Double
字符类型 String
集合类型 Arrary Dictionary
注意点:
1:基本类型⾸写字母要⼤写。
2:基本类型不能直接定义类型变量(这和其他语⾔有所不同)
*/
//变量说明:'='之间要么不留空格,要么都留空格.如果保留⼀侧的空格,那么就会error:prefix /postfix=is reserved ,原因是:'='号前后空格是有⼀侧存在的是保留运算 var numOne = 10 //不指定类型,系统会根据赋值情况来判断类型
var numTwo:Int=20 //指定类型为Int
var numThree=12.5
var numFour :Double = 15.5 //指定为Double类型
//不能这样赋值,因为第⼀次赋值已经决定了numFour的类型为Double,不符合协议
//numFour = "How Are you?" //error : Type 'Double' does not conform to protocol 'StringLiteralConvertible'
var 您好 = "hello!"; //在swift中,所有的UInicode编码的字符都可以被当做变量名或常量名声明和使⽤
var strOne :String=您好+"swift"; //使⽤'+'可以拼接字符串
//定义集合 error:array stypes are now written with the brackets around the element type
//var strLists : String []=["Hello->","Swift-->"];//之前的beta版可以这样做,但是现在不⾏
//改为:
var strLists : [String] = ["Hello->","Swift-->"];
var strList=["Hello->","Swift->"];//集合
//说明:\()为占位符<;有些地⽅说这个占位符不⽀持String类型,下⾯的for循环中做了测试,可以通过>
println("\(numTwo)\(numOne)"+strOne)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论