Swift — приведение Int64 к AnyObject для NSMutableArray

Привет, у меня есть NSMutableArray, и я пытаюсь сделать это:

var ma = NSMutableArray()
let number:Int64 = 8345834344
ma.addObject(number)// Error "Type Int64 does not conform to protocol AnyObject"

Как добавить переменную Int64 в NSMutableArray()?


person Bogdan Bogdanov    schedule 04.12.2014    source источник


Ответы (2)


Вы используете массив Foundation (NSMutableArray), поэтому вам следует использовать объект числа Foundation:

ma.addObject(NSNumber(longLong:number))

Вы также можете использовать собственный массив Swift:

var ma = [Int64]()
ma.append(number)
person Mundi    schedule 04.12.2014
comment
Спасибо. Я хочу, чтобы NSMutableArray() использовал .objectAtIndex :) - person Bogdan Bogdanov; 05.12.2014
comment
Нет, я просто не знаю, как найти индекс в массиве swift :) - person Bogdan Bogdanov; 05.12.2014
comment
Массивы Swift имеют собственный механизм поиска индекса: let arr = [a,b,c] let indexOfA = arr.indexOf(a) - person Prientus; 03.05.2016

Как и многое в Swift, это реализовано в Swift.

Таким образом, вы можете сделать это (или эквивалент для нужных вам типов), что волшебным образом позволит использовать Int64 там, где язык ожидает AnyObject:

extension Int64 : _ObjectiveCBridgeable
{
    public init(_ number: NSNumber)
    {
        self.init(number.longLongValue)
    }

    public func _bridgeToObjectiveC() -> NSNumber
    {
        return NSNumber(longLong: self)
    }

    public static func _getObjectiveCType() -> Any.Type
    {
        return NSNumber.self
    }

    public static func _isBridgedToObjectiveC() -> Bool
    {
        return true
    }

    public static func _forceBridgeFromObjectiveC(source: NSNumber, inout result: Int64?)
    {
        result = source.longLongValue
    }

    public static func _conditionallyBridgeFromObjectiveC(source: NSNumber, inout result: Int64?) -> Bool
    {
        result = source.longLongValue
        return true
    }
}
person user2488730    schedule 04.04.2016