• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift学习笔记属性

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Swift中属性是描述特定类、结构或者枚举的值,可以分为以下几种:

   1.存储属性(Stored Properties) 

        2.计算属性(Computed Properties)

        3.类型属性(Type Properties)

存储属性:

  //存储属性就是实例对象的该属性不需要自己额外实现方法,直接简单明了->存取原始值
  struct name
  {
      var firstName :String  
      let lastName  :String
  }

计算属性:


//计算属性就是实例对象的该属性是根据其他数据算出自己本身的值,必须自己实现get方法,set可选实现
struct name
{
    var firstName :String   //存储属性
    let lastName  :String   //存储属性
    var fullName  :String   //计算属性,没有get set声明,默认生成get,只读
    {
            return firstName + lastName
//        get{
//          return firstName + lastName
//        }
// set{
// //do something
//
}

}}

类型属性:

//类型属性简单的说就是计算属性或存储属性从实例对象使用转变到类使用...但是无法实现willset didset属性监听 可以通过set

//------------------------结构体---------------------
struct TestStruct
{
    static var typePropertyInStructOrEnum = "这是结构体和枚举中的类型属性的定义方式1"
}
TestStruct.typePropertyInStructOrEnum;


//------------------------枚举---------------------
enum TestEnum
{
    static var typePropertyInStructOrEnum : NSString{
        return "这是结构体和枚举中的类型属性的定义方式2"
}
}
TestEnum.typePropertyInStructOrEnum;


//------------------------类---------------------
class TestClass
{
    class var typePropertyInClass : String{ //类型属性
        return "这是类中的类型属性的定义方式"
    }
}
TestClass.typePropertyInClass

属性监听:

  存储属性可以添加如下的一个或全部监视器:

  • willSet在设置新的值之前调用
  • didSet在新的值被设置之后立即调用

     willSet监视器会将新的属性值作为固定参数传入,在willSet的实现代码中可以为这个参数指定一个名称,如果不定义参数使用默认名称newValue表示。

     didSet监视器会将旧的属性值作为参数传入,可以自己定义的参数命名或者使用默认参数名oldValue。

  

struct Name
{
    var firstName :String   //存储属性
        {
        willSet{
            print("firstName 将从 \(firstName) 改变到 \(newValue)"); 
        }
        didSet{
            print("\nfirstName 已从 \(oldValue) 改变到 \(firstName)\n");
        }
//      didSet(val){
//          print("firstName 已从 \(val) 改变到 \(firstName)");
//     }
        
    }
    var lastName  :String  //存储属性
    var fullName  :String   //计算属性,没有get set声明,默认生成get,只读
    {
            return firstName + lastName
    }
}

//初始化时监听无效的
var name = Name(firstName: "onebyte", lastName: "yy")

//下面这句监听有效
name.firstName = "11"

//log :
//firstName 将从 onebyte 改变到 11
//firstName 已从 onebyte 改变到 11

  而计算属性则在set里面实现监听:

struct Name
{
    var firstName :String  //存储属性
    var lastName  :String  //存储属性
    var fullName  :String   //计算属性,没有get set声明,默认生成get,只读
    {
        get{
            return firstName + lastName
        }
        set{
            //do something before set(willSet)
            
            //set (比如根据某种分割或者规则设置firstName lastName)
            
            //do something after set(didSet)
            
        }
    }
}

 

注意点:

name.firstName = "11" 调用的是 name实例中的firstName的set
var nFirtNameStr = name.firstName 调用的是name实例中firstName的get
所以不能在get中取firstName的值,或者set中设置firstName中的值,不然造成死循环 bad_access

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
如何在Swift里用UnsafeMutablePointer发布时间:2022-07-18
下一篇:
Swift3.0:PhotoKit的使用发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap