Swift-метод, передающий NSLocalizedString параметру NSObject, компилироваться не будет

Я должен был изменить метод Objective-C, чтобы взять NSObjectпараметр, который на самом деле ожидается, будет NSStringили an NSLocalizedString. Первоначально метод был объявлен для принятия NSStringпараметра , но мне нужна была гибкость, чтобы быть в состоянии передать NSStringили или anNSLocalizedString, который, как я обнаружил, к моему ужасу, имеют только NSObjectкак общий предок.

Это изменение типа параметра метода Objective-C привело к возникновению проблем в некотором существующем коде Swift, вызывающем метод с NSLocalizededStringпараметром, переданным как:

NSLocalizedString('random key', comment: 'Key name')

Вот фактический код, который, я не думаю, будет более информативным:

appDelegate.menuOverlayViewController.showPopup(withStateName: "didRequestTrackChange", 
withTitle: NSLocalizedString("localization.popup.title", comment: "Success!"), 
withIconName: "icon_like", 
withBody:body)

Немодифицированный код создает эту ошибку:

Не удается преобразовать значение типа ‘ String ‘в ожидаемый аргумент типа’ NSObject!’

если я попытаюсь бросить то NSLocalizedStringNSObjectвроде так:

NSObject(NSLocalizedString('random key', comment: 'Key name'))

Я столкнулся со следующей ошибкой:

Аргумент, передаваемый вызову, который не принимает аргументы

Как это исправить? Я относительно новичок в Swift, поэтому не понимаю нюансов того, как я бы бросил что-то или почемуNSLocalizedString, по-видимому, превращается в Swift Stringеще до того, как перейти к параметру типа NSObject.

2 ответа

  1. Вместо

    NSObject(NSLocalizedString('random key', comment: 'Key name'))
    

    пытаться

    (NSString(string :NSLocalizedString('random key', comment: 'Key name'))
    

    Edit: What about

    NSLocalizedString('random key', comment: 'Key name') as! NSObject
    
  2. Свифт-Stringэто не объект, а а struct. Если вы хотите использовать NSObjectдля обоих NSStringиNSLocalizedString, бросьте Swift Stringas NSString.

    "my string" as NSString
    

    Или рассмотрите возможность использования протокола и расширения обоих NSStringи NSLocalizedStringсоответствия ему.