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
的子类,除非您想在中使用它 目的-CNSObject
- 您可能不想在中打印
的内容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
的子类,除非您想在中使用它 目的-CNSObject
- 您可能不想在中打印
的内容testresultaray
方法。你可以有其他方法来解决这个问题 访问阵列addTestResult()
let myTestManager = SpeedTestManager()
myTestManager.addTestResult(testResult)
// create other test results and add them ...