Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift中从NSObject访问元素?_Ios_Swift_Swift2_Local Storage_Nsobject - Fatal编程技术网

Ios 如何在swift中从NSObject访问元素?

Ios 如何在swift中从NSObject访问元素?,ios,swift,swift2,local-storage,nsobject,Ios,Swift,Swift2,Local Storage,Nsobject,我已经将一些变量设置为对象 import UIKit class SpeedTestResult: NSObject { var testTime: NSDate? } 然后在控制器中设置此对象并将其传递给类以存储它: testResult.testTime = NSDate() SpeedTestManager().addTestResult(testResult) 我需要存储此对象,然后在以后的视图中访问其中的元素,这就是我所拥有的: import Foundation clas

我已经将一些变量设置为对象

import UIKit
class SpeedTestResult: NSObject {
    var testTime: NSDate?
}
然后在控制器中设置此对象并将其传递给类以存储它:

testResult.testTime = NSDate()
SpeedTestManager().addTestResult(testResult)
我需要存储此对象,然后在以后的视图中访问其中的元素,这就是我所拥有的:

import Foundation
class SpeedTestManager : NSObject {
    var testResultArray = [NSObject]()
    func addTestResult(testResult: NSObject) {
        testResultArray.append(testResult)
        print("Printing testResultArray: \(testResultArray)")

    }
}
但当我试图打印对象时,我得到的是

Printing testResultArray: [<ProjectName.SpeedTestResult: 0x127b85e50>]
打印testResultArray:[]

如何访问对象中的元素并存储此对象并检索它以供以后在视图中使用?

以下是一种方法:

    import Foundation

    class SpeedTestResult: NSObject {
        var testTime: NSDate?
    }

    class SpeedTestManager : NSObject {
        var testResultArray = [NSObject]()
        func addTestResult(testResult: NSObject) {
            testResultArray.append(testResult)
            for result in testResultArray {
//  This will crash if result is not a SpeedTestResult.
//                print((result as! SpeedTestResult).testTime)
//  This is better:
               if let timeResult = result as? SpeedTestResult
               {
                   print(timeResult.testTime)
               }
               else 
               {
                   print("Not time type...")
               }
            }           
        }
    }

    var testResult = SpeedTestResult()
    testResult.testTime = NSDate()
    SpeedTestManager().addTestResult(testResult)
这解决了您的具体问题,但这里还有一些其他问题:

  • 如果只在中存储
    SpeedTestResult
    实例
    testresultaray
    ,那么为什么不将其设置为
    [SpeedTestResultl]()
  • 如果要在数组中存储不同类型的测试,那么如何 找出
    NSObject
    元素所代表的测试类型? 有很多方法。。。在上面的代码中,我们至少要确保没有将错误类型的对象视为
    SpeedTestResult
  • 当您执行
    SpeedTestManager().addTestResult(testResult)
    时,您不需要 保留对
    SpeedTestManager
    实例的引用。下次 如果您拨打相同的电话,您将创建不同的
    SpeedTestManager
    实例

  • 这并不是一个真正的问题,但是
    SpeedTestManager
    不必这样做 必须是
    NSObject
    的子类,除非您想在中使用它 目的-C

  • 您可能不想在中打印
    testresultaray
    的内容
    addTestResult()
    方法。你可以有其他方法来解决这个问题 访问阵列
要将测试结果添加到同一测试管理器,可以执行以下操作:

let myTestManager = SpeedTestManager()
myTestManager.addTestResult(testResult)     
// create other test results and add them ...

以下是一种方法:

    import Foundation

    class SpeedTestResult: NSObject {
        var testTime: NSDate?
    }

    class SpeedTestManager : NSObject {
        var testResultArray = [NSObject]()
        func addTestResult(testResult: NSObject) {
            testResultArray.append(testResult)
            for result in testResultArray {
//  This will crash if result is not a SpeedTestResult.
//                print((result as! SpeedTestResult).testTime)
//  This is better:
               if let timeResult = result as? SpeedTestResult
               {
                   print(timeResult.testTime)
               }
               else 
               {
                   print("Not time type...")
               }
            }           
        }
    }

    var testResult = SpeedTestResult()
    testResult.testTime = NSDate()
    SpeedTestManager().addTestResult(testResult)
这解决了您的具体问题,但这里还有一些其他问题:

  • 如果只在中存储
    SpeedTestResult
    实例
    testresultaray
    ,那么为什么不将其设置为
    [SpeedTestResultl]()
  • 如果要在数组中存储不同类型的测试,那么如何 找出
    NSObject
    元素所代表的测试类型? 有很多方法。。。在上面的代码中,我们至少要确保没有将错误类型的对象视为
    SpeedTestResult
  • 当您执行
    SpeedTestManager().addTestResult(testResult)
    时,您不需要 保留对
    SpeedTestManager
    实例的引用。下次 如果您拨打相同的电话,您将创建不同的
    SpeedTestManager
    实例

  • 这并不是一个真正的问题,但是
    SpeedTestManager
    不必这样做 必须是
    NSObject
    的子类,除非您想在中使用它 目的-C

  • 您可能不想在中打印
    testresultaray
    的内容
    addTestResult()
    方法。你可以有其他方法来解决这个问题 访问阵列
要将测试结果添加到同一测试管理器,可以执行以下操作:

let myTestManager = SpeedTestManager()
myTestManager.addTestResult(testResult)     
// create other test results and add them ...