Ios objc_getAssociatedObject始终返回nil

Ios objc_getAssociatedObject始终返回nil,ios,swift,Ios,Swift,我试图使用关联对象将属性添加到Timer的扩展中,但函数objc\u setAssociatedObject始终返回nil 所以这应该行得通 代码: 你知道为什么这不起作用吗 更多代码: @nonobjc public class func new(every interval: TimeInterval, _ block: @escaping (Timer) -> Void) -> Timer { var timer: Timer! timer = CFRunLo

我试图使用关联对象将属性添加到
Timer
的扩展中,但函数
objc\u setAssociatedObject
始终返回
nil

所以这应该行得通

代码:

你知道为什么这不起作用吗


更多代码:

@nonobjc public class func new(every interval: TimeInterval, _ block: @escaping (Timer) -> Void) -> Timer {
    var timer: Timer!
    timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent() + interval, interval, 0, 0) { _ in
        print("timer: \(timer.numberOfRepeats), : \(timer.repeatCounter), : \(timer)")
        if timer.numberOfRepeats > 0 {

            if timer.repeatCounter > timer.numberOfRepeats {

                timer.invalidate()
                return
            } else {

                timer.repeatCounter += 1
            }
        }

        block(timer)
    }
    return timer
}

所以有些问题是我没有使用相同的计时器对象。 还有一些问题:

  • static let repeatCounterAddress=“repeat\u counter\u address”
    有时未初始化,并且具有空字符串值

  • 有时我得到相同的关联值,有时则没有

  • 请尝试以下操作(注意符号):

    它始终确保给定的地址与
    键的值相同。如果只使用字符串值,则每次调用
    objc\u getAssociatedObject
    objc\u setAssociatedObject
    时,其原始值可能不同

    您可以使用以下代码对此进行检查:

    func test(_ a: UnsafeRawPointer) {
        print("\(a)")
    }
    
    let a = "abc"
    
    test(a)
    test(a)
    test(a)
    test(a)
    
    这张照片

    0x00006040004427e0
    0x00006040004427e0
    0x0000608000052980
    0x0000600000055c50
    
    例如,不同的原始指针被解释为不同的关联对象。

    请尝试以下操作(注意符号):

    它始终确保给定的地址与
    键的值相同。如果只使用字符串值,则每次调用
    objc\u getAssociatedObject
    objc\u setAssociatedObject
    时,其原始值可能不同

    您可以使用以下代码对此进行检查:

    func test(_ a: UnsafeRawPointer) {
        print("\(a)")
    }
    
    let a = "abc"
    
    test(a)
    test(a)
    test(a)
    test(a)
    
    这张照片

    0x00006040004427e0
    0x00006040004427e0
    0x0000608000052980
    0x0000600000055c50
    

    例如,不同的原始指针被解释为不同的关联对象。

    我想我是,我在CFRunLoopTimerCreateWithHandler闭包中使用计时器,用更多代码更新问题这是我想我是的一个分支,我在CFRunLoopTimerCreateWithHandler闭包中使用计时器,用更多代码更新问题这是一个分叉