微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 为什么let声明的结构可以改变?

在下面的代码中,’ptr’是let声明的结构,但是它的成员变量’pointee’可以改变,为什么?

    let ptr = UnsafeMutablePointer< Int> .allocate(capacity:1)
    ptr.pointee = 1

解决方法

UnsafeMutablePointer一个结构,但它声明了

public struct UnsafeMutablePointer<Pointee> : Strideable,Hashable {

    public var pointee: Pointee { get nonmutating set }
    public subscript(i: Int) -> Pointee { get nonmutating set }

}

这里的“非突变集”意味着设置属性不会发生变异
指针变量本身的状态.

因此,即使ptr,也可以为ptr.pointee分配一个新值
一个常量,下标setter也是如此:

let ptr = UnsafeMutablePointer<Int>.allocate(capacity:1)
ptr.pointee = 1
ptr[0] = 2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐