1.初始化方法和類方法
定義一個(gè)類,繼承與 NSObject 在里面寫如下代碼
import UIKit
class Person: NSObject {
var name:String?
var age:Int?
// init 初始化方法
override init() {
super.init()
name = "nihao"
age = 18
}
// 重載 init 方法
init(name:String,age:Int) {
super.init()
self.name = name
self.age = age
}
func sayHi(){
print("ni hao")
}
// 類方法
// 寫法1:用 class 修飾,表示類方法,能夠被子類重載
class func saySomething() {
print("6666")
}
class func PersonWithAndAge(name:String,age:Int)->Person {
let p = Person(name: name, age: age)
return p
}
// 寫法2:用 static 修飾,也表示類方法,不能夠被子類重載
static func eatSomething(){
print("eat food")
}
}
創(chuàng)建一個(gè) student 類,繼承與 Person
import UIKit
class Student: Person {
func sayHai() {
print("say hai")
}
}
在 viewController.swift 中調(diào)用類中的方法
import UIKit
class ViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
// 調(diào)用init 初始化方法
let person1 = Person()
print(person1.name,person1.age)
// 重載的 init 方法
let person2 = Person(name:"nihao",age:18)
print("person2.name = \(person2.name!),person2.age = \(person2.age!)")
person2.sayHi()
// 如果要去掉打印可選類型的 optional 字樣,對(duì)可選類型進(jìn)行強(qiáng)制解包就可以了
let stu = Student()
stu.sayHai()
let stu = Student(name: "123", age: 11)
stu.sayHai()
Person.saySomething()
Person.eatSomething()
2.KVC
創(chuàng)建一個(gè)類,繼承與 NSObject
import UIKit
class Animal: NSObject {
// KVC 調(diào)用流程: KVC 是一種通過(guò)字符串間接的訪問(wèn)對(duì)象屬性的一種方式
// 1.調(diào)用 setValuesForKeysWithDictionary
// 2.調(diào)用 setValue:forKey
// 如果有找到對(duì)象的 key 值,則初始化并且賦值,沒有的話則到第三步
// 3.setValue:forUndeFinedKey:
var name:String?
var age:Int = 0// 基本數(shù)據(jù)類型在模型里面不能為可選類型,否則在 KVC 賦值的時(shí)候會(huì)找不到相應(yīng)的 key 值
var gender:String?
init(dict:[String:AnyObject]) {
super.init()
setValuesForKeysWithDictionary(dict)
}
override func setValue(value: AnyObject?, forKey key: String) {
super.setValue(value, forKey: key)
}
override func setValue(value: AnyObject?, forUndefinedKey key: String) {
}
}
在 viewController.swift 中調(diào)用類中的方法
import UIKit
class ViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
let dict = ["name":"xiazi","age":69,"gender":"雄"]
let animal = Animal(dict: dict)
print("name = \(animal.name),age = \(animal.age),gender = \(animal.gender)")
3.單例
import UIKit
class SingleTon: NSObject {
var name:String?
// swift 單例寫法1
/* 格式:
static let 名字:類型 = {
let instance = 類型()
return instance
}()
*/
static let shareSingleTon:SingleTon = {
let instance = SingleTon()
return instance
}()
// swift 單例寫法2
/* 格式:
static let instance = 類名()
class func shareSingleTon()->返回值類型
{
return instance
}
*/
static let instance = SingleTon()
class func shareSingleTon()->SingleTon {
return instance
}
}
調(diào)用
// 單例寫法1
let s1 = SingleTon.shareSingleTon
s1.name = "nima"
let s2 = SingleTon.shareSingleTon
print("s2.name = \(s2.name)")
let s3 = SingleTon.shareSingleTon
print("s3.name = \(s3.name)")
// 單例寫法2
let s1 = SingleTon.shareSingleTon()
s1.name = "nima"
let s2 = SingleTon.shareSingleTon()
print("s2.name = \(s2.name)")
let s3 = SingleTon.shareSingleTon()
print("s3.name = \(s3.name)")
4.協(xié)議
import UIKit
// protocol 標(biāo)識(shí)符如果前面沒有@objc 的話,表示協(xié)議里面的方法都必須實(shí)現(xiàn)
protocol womanDelegate
{
func manMakeMoney()
}
// 如果協(xié)議里面有一些方法是選擇實(shí)現(xiàn)的,必須在標(biāo)識(shí)符 protocol 前面加上@objc, 并且選擇實(shí)現(xiàn)的那些方法前面要加上 optional 修飾,必須實(shí)現(xiàn)的方法則一樣不用修飾符
@objc protocol womanOptionalDelegate{
// 可選擇實(shí)現(xiàn)的方法
optional func washClothes()
// 必須實(shí)現(xiàn)的方法
func introduceSelf()
}
class Woman: NSObject {
var delegate:womanDelegate?
var optionalDelegate:womanOptionalDelegate?
}
遵守協(xié)議
class ViewController:UIViewController,womanDelegate,womanOptionalDelegate {
調(diào)用
// 協(xié)議
let woman = Woman()
woman.delegate = self
woman.optionalDelegate = self
woman.delegate?.manMakeMoney()
func manMakeMoney() {
print("man make money")
}
func introduceSelf() {
print("i am woman")
}
5.網(wǎng)絡(luò)請(qǐng)求
// 網(wǎng)絡(luò)請(qǐng)求
// 以后寫閉包回調(diào)的時(shí)候要把參數(shù)都寫成可選類型
let urlString = "http://mobile.ximalaya.com/mobile/others/ca/album/track/5541/true/1/15"
let url = NSURL(string: urlString)
let dataTask = NSURLSession.sharedSession().dataTaskWithURL(url!) { (data, response, error) -> Void in
// try 如果有錯(cuò)的話警告
// try! 如果有出錯(cuò)直接程序崩潰
// try? 返回值是可選類型的
if let temp = data{
do{
let rootDict = try NSJSONSerialization.JSONObjectWithData(temp, options: NSJSONReadingOptions.MutableContainers)
print(rootDict)
}catch{
print(error)
}
}
}
dataTask.resume()