在 iOS Swift 类中创建值类型属性

Create a value type property in Class iOS swift

提问人:rajeev pulleti 提问时间:4/20/2021 最后编辑:rajeev pulleti 更新时间:4/21/2021 访问量:637

问:

我们都知道类的属性始终是引用类型,但是有没有可能在类中创建值类型属性呢?

类:

class Color {
    var name : String!
    init(name : String) {
        self.name = name
    }
}

利用率 :

    let red = Color(name: "Red")
    let yellow = red
    print("red \(red.name ?? "")")  // prints Red
    print("yellow \(yellow.name ?? "")") // prints Red


   // assigning a new value to yellow instance

    yellow.name = "Yellow"
    print("red \(red.name ?? "")")  // prints Yellow
    print("yellow \(yellow.name ?? "")") // prints Yellow

在为黄色实例赋值后,它也会更改红色实例的值。

iOS Swift 引用 传递值

评论

4赞 Sweeper 4/20/2021
“类的属性始终是引用类型”不为真。如果你曾经在类中声明过 or 属性,你就会知道,IntString
0赞 rajeev pulleti 4/20/2021
嗨,@Sweeper,感谢您的快速回复,我编辑了我的问题,请检查
4赞 Sweeper 4/20/2021
这与类是否具有引用类型或值类型属性无关。它与类本身是引用类型还是值类型有关。好吧,类始终是引用类型,所以答案是否定的。Color

答:

0赞 Mỹ Mỹ 4/20/2021 #1

类是引用类型,因此您可以尝试从类的实例创建副本。

也许会有所帮助。

0赞 salman siddiqui 4/21/2021 #2
class Color: NSObject, NSCopying {
            var name : String!
            init(name : String) {
                self.name = name
            }
        
            func copy(with zone: NSZone? = nil) -> Any {
                let copy = Color(name: name)
                return copy
            }
   }

    let red = Color(name: "red")
    let yellow = red.copy() as! Color
    
    print("red \(red.name ?? "")")  // prints Red
    print("yellow \(yellow.name ?? "")") // prints Red
    
    // assigning a new value to yellow instance
    
     yellow.name = "Yellow"
     print("red \(red.name ?? "")")  // prints red
     print("yellow \(yellow.name ?? "")") // prints Yellow
  • 使类符合 NSCopying。这不是严格要求的,但它可以明确您的意图。
  • 实现 copy(with:) 方法,其中实际复制 发生。
  • 在对象上调用 copy()。