zoukankan      html  css  js  c++  java
  • Swift面向对象基础(上)——Swift中的类和结构体(上)

    学习来自《极客学院》

     1 import Foundation
     2 
     3 //1.定义类和结构体
     4 /*
     5 [修饰符]calss 类名{
     6     零到多个构造器
     7     零到多个属性
     8     零到多个方法
     9     零到多个下标
    10 }
    11 修饰符可以是:private public internal final
    12 */
    13 
    14 /*定义结构体
    15 [修饰符]struct 结构体名{
    16 
    17 }
    18 修饰符可以是:private public internal
    19 */
    20 
    21 /*
    22 定义属性的语法
    23 [修饰符] var或者let 存储属性名:类型名 = 初始值  <就是一般的变量声明和定义的方式>
    24 */
    25 
    26 //类的创建以及实例的创建我懂,所以下面直接创建结构体,以及结构体的实例
    27 struct dog{
    28     var name:String
    29     var age:Int
    30     func run(){
    31         println("(age)岁的(name)跑步中...")
    32     }
    33 }
    34 var littledog:dog = dog(name: "小狗", age: 5)
    35 littledog.run()
    36 
    37 //重点(结构体和类的区别):结构体是值类型,类是引用类型
    38 
    39 //内存里的对象可以有多个引用,即多个引用变量指向同一个对象,这个不用多说,下面就直接证明结构体是值类型
    40 var bigdog = littledog
    41 bigdog.name = "大狗"
    42 bigdog.age = 9
    43 bigdog.run()

    运行结果:

    Swift的一个代码(有关swift懒加载、使用了KVC定义模型):

      1 //
      2 //  Class.swift
      3 //  Swift的一个类
      4 //
      5 //  Created by HEYANG on 16/3/19.
      6 //  Copyright © 2016年 HEYANG. All rights reserved.
      7 //
      8 //  http://www.cnblogs.com/goodboy-heyang
      9 //  https://github.com/HeYang123456789
     10 //
     11 
     12 import Foundation
     13 
     14 class OneClass : NSObject{
     15     
     16    //=======属性+懒加载=======
     17     //如何自定义一个对象,而对象的属性如果又是基本数据类型,不建议设置为可选类型
     18     //而应该赋值为0,或者-1
     19     var value:Int = 0
     20     var string:String?
     21     var 闭包: (()->())? //声明一个闭包
     22     /* 
     23         懒加载的格式:
     24             lazy var 变量名称:数据类型 = 闭包()
     25             注意:闭包后面的()必须写,代表着执行闭包,将闭包的返回值赋值给变量
     26     */
     27     lazy var listData:[String]? = {
     28         () -> [String]
     29         in
     30         print("Hello world!")
     31         return ["hello","world"]
     32     }()
     33     // 如果在懒加载中,属性指明了类型,那么闭包中的前面两行就可以省略
     34     lazy var listData2:[String]? = {
     35         print("Hello world!")
     36         return ["hello","world"]
     37     }()
     38     // 如果实际开发中,懒加载的属性比较多,可以这么处理
     39     lazy var listData3:[String]? = self.test()
     40     // 由此可见,闭包就是一个特殊的函数
     41     func test() -> [String]{
     42         print("Hello world!")
     43         return ["hello","world"]
     44     }// 这函数部分可以统一放在别处
     45     
     46     // 开发中推荐的写法
     47     lazy var listData4 = {
     48         () -> [String]
     49         in
     50         print("Hello,world!")
     51         return ["Hello","World"]
     52     }()
     53     
     54     //=======构造方法=======
     55     override init() {
     56         value = 22
     57         string = "开心"
     58     }
     59     
     60     //=======自定义构造方法,并使用KVC=======
     61     init(value:Int,string:String) {
     62         // 初始化属性
     63         self.value = value
     64         self.string = string
     65     }
     66     
     67     init(dict: [String:AnyObject])
     68     {
     69         // 实现字典转模型,必须先手动调用调用父类init方法
     70         super.init()
     71         setValuesForKeysWithDictionary(dict)
     72     }
     73     
     74     // 如果利用KVC赋值,但是字典和模型的属性不能一一对应,就调用下面的方法
     75     override func setValue(value: AnyObject?,forUndefinedKey key:String){
     76         print("下面是[]的部分就是模型中找不到的属性:")
     77         print("[key:(key),value:(value)]")
     78     }
     79     //=======重写description属性=======
     80     override var description: String{
     81         // 优化
     82         let property = ["value","string"]//属性名
     83         let dictKeyValue = dictionaryWithValuesForKeys(property)
     84         return "(dictKeyValue)"
     85         
     86         //        return "Hello"
     87     }
     88     // 这个description就是属性,不过重写了简化的get方法,就是只读属性
     89 
     90 //    // 在Swift中只读属性称之为:计算型属性,它不具备存储性能
     91 //    // 下面是只读属性的一般写法
     92 //    var name:String
     93 //    {
     94 //        willSet{
     95 //            print(name)
     96 //            print(newValue)
     97 //        }
     98 //        didSet{
     99 //            print(name)
    100 //            print(oldValue)
    101 //        }
    102 //    }
    103 //    var name2:String
    104 //    {
    105 //        get{
    106 //            return "只读属性"
    107 //        }
    108 //    }// 然后简写成
    109 //    var name3:String
    110 //    {
    111 //        
    112 //            return "只读属性"
    113 //        
    114 //    }
    115     
    116     
    117     //=======析构方法=======
    118     deinit{
    119         
    120     }
    121 }
    122 
    123 //=======知识补充=======
    124 
    125 /*
    126 声明闭包的时候
    127     错误的写法:var 闭包: ()->()?
    128     正确的写法:var 闭包: (()->())?
    129 因为在"错误的写法:var 闭包: ()->()?"中,代表的是闭包的返回值是可选的,而不是闭包是可选的
    130 
    131 */

     源码下载:链接: http://pan.baidu.com/s/1skuEwWl 密码: 3psc

  • 相关阅读:
    js 日期比较 (输入的是字符串格式)
    js 弹出确认 取消对话框
    存储过程中查询多个字段的值来判断
    SQL中IF查询
    SQL server 2000安装时提示我”以前的某个程序安装已在安装计算机上创建挂起的文件操
    怎样做人
    RSS
    Silverlight教程第四部分:使用 Style 元素更好地封装观感 (木野狐译)
    Silverlight 2 初览
    Silverlight教程第七部分: 使用控件模板定制控件的观感
  • 原文地址:https://www.cnblogs.com/goodboy-heyang/p/4649625.html
Copyright © 2011-2022 走看看