swift setter导致exc_bad_access

前端之家收集整理的这篇文章主要介绍了swift setter导致exc_bad_access前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我下面有一个简单的课程
  1. import Foundation
  2.  
  3. public class UsefulClass: NSObject{
  4. var test:NSNumber{
  5. get{return self.test}
  6. set{
  7. println(newValue)
  8. self.test = newValue
  9. }
  10. }
  11. override init() {
  12. super.init()
  13. self.test = 5;
  14. }
  15. }

我在这里初始化它

  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4. override func viewDidLoad() {
  5. super.viewDidLoad()
  6. var testClass = UsefulClass()
  7. }
  8. }

但是由于EXC_BAD_ACCESS代码= 2,它导致xcode打印出200 5s然后崩溃?为什么会发生这种情况?

@vadian在他的回答中提供了一个解决方案,它可以解决你的问题.让我来解释一下发生了什么.

您已经创建了一个计算属性,即一个没有变量支持属性,而是getter和setter都经常在另一个存储属性上进行一些处理,以便分别返回一个值并设置一个新值.

这是你的计算属性

  1. var test: NSNumber {
  2. get { return self.test }
  3. set {
  4. println(newValue)
  5. self.test = newValue
  6. }
  7. }

看看getter实现:

  1. return self.test

它有什么作用?它读取当前实例的test属性,并返回它.哪个测试属性?就是这个:

  1. var test: NSNumber {
  2. get { return self.test }
  3. set {
  4. println(newValue)
  5. self.test = newValue
  6. }
  7. }

是的,它是同一个属性.你的getter所做的是以递归方式无限期地调用自身,直到在运行时发生崩溃.

同样的规则适用于setter:

  1. self.test = newValue

它一直在调用自己,直到应用程序崩溃.

猜你在找的Swift相关文章