Подтвердить что ты не робот

Swift 2: OBJC_ASSOCIATION_RETAIN_NONATOMIC использование неразрешенного идентификатора

Я только что обновил свой проект до Swift 2.

Я один из моих быстрых классов использую ассоциацию ObjC.

У меня есть следующее:

objc_AssociationPolicy( OBJC_ASSOCIATION_RETAIN_NONATOMIC)

С момента обновления компилятор возвращает Use of unresolved identifier 'OBJC_ASSOCIATION_RETAIN_NONATOMIC'.

Любая идея, почему?


Изменить: Для тех, у кого такая же проблема, временным решением будет замена константы на ее значение, т.е. 1: objc_AssociationPolicy( rawValue: 1 )

4b9b3361

Ответ 1

Если вы посмотрите на заголовок swj c run runtime, кажется, что эта конструкция стала enum:

/**
 * Policies related to associative references.
 * These are options to objc_setAssociatedObject()
 */
enum objc_AssociationPolicy : UInt {

    case OBJC_ASSOCIATION_ASSIGN
    case OBJC_ASSOCIATION_RETAIN_NONATOMIC

    case OBJC_ASSOCIATION_COPY_NONATOMIC

    case OBJC_ASSOCIATION_RETAIN

    case OBJC_ASSOCIATION_COPY
}

Таким образом, вы можете заменить на: objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC.

Если вам нужен токен как UInt, вы всегда можете использовать .rawValue.

(В предыдущей версии objc_AssociationPolicy был всего лишь типом для UInt - с эффектом кастинга 'OBJC_ASSOCIATION_RETAIN_NONATOMIC', Int)

Ответ 2

Попробуйте следующее:

import ObjectiveC.runtime

func setOverlay(view: UIView)
{
    objc_setAssociatedObject(self, &AssociatedKeys.overlayKey, view, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}