swift 初学知识点归纳

2016-06-13  本文已影响36人  蹲在路口的男孩丶

1.初始化方法和类方法
定义一个类,继承与 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")
}

}

创建一个 student 类,继承与 Person
import UIKit

class Student: Person {

func sayHai() {
    print("say hai")
}

}

在 viewController.swift 中调用类中的方法
import UIKit

class ViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()

    // 调用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 字样,对可选类型进行强制解包就可以了
    
    let stu = Student()
    stu.sayHai()
    
    
    let stu = Student(name: "123", age: 11)
    stu.sayHai()
    
    
    Person.saySomething()
    Person.eatSomething()

2.KVC
创建一个类,继承与 NSObject

import UIKit

class Animal: NSObject {

// KVC 调用流程: KVC 是一种通过字符串间接的访问对象属性的一种方式
// 1.调用 setValuesForKeysWithDictionary
// 2.调用 setValue:forKey
// 如果有找到对象的 key 值,则初始化并且赋值,没有的话则到第三步
// 3.setValue:forUndeFinedKey:

var name:String?
var age:Int = 0// 基本数据类型在模型里面不能为可选类型,否则在 KVC 赋值的时候会找不到相应的 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 中调用类中的方法

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
} 

}

调用

   // 单例写法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.协议

   import UIKit
   // protocol 标识符如果前面没有@objc 的话,表示协议里面的方法都必须实现
 protocol womanDelegate
{
   func manMakeMoney()
  }

     // 如果协议里面有一些方法是选择实现的,必须在标识符 protocol 前面加上@objc, 并且选择实现的那些方法前面要加上 optional 修饰,必须实现的方法则一样不用修饰符
      @objc protocol womanOptionalDelegate{
// 可选择实现的方法 
      optional func washClothes()
// 必须实现的方法
    func introduceSelf()
  }


   class Woman: NSObject {


     var delegate:womanDelegate?

      var optionalDelegate:womanOptionalDelegate?
     }

遵守协议

   class ViewController:UIViewController,womanDelegate,womanOptionalDelegate {

调用

     // 协议
    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.网络请求

 // 网络请求
    // 以后写闭包回调的时候要把参数都写成可选类型
    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 如果有错的话警告
        // try! 如果有出错直接程序崩溃
        // try? 返回值是可选类型的
        if let temp = data{
            do{
                let rootDict = try NSJSONSerialization.JSONObjectWithData(temp, options: NSJSONReadingOptions.MutableContainers)
                print(rootDict)
            }catch{
                print(error)
            }
        }
    }
    dataTask.resume()
上一篇 下一篇

猜你喜欢

热点阅读