Я бегу следующее в детской площадке (я тестировал в Xcode 7.3.1, а также Xcode 8.1 и увидеть такое же поведение):Что вызывает преобразование элементов UIPastboard в NSConcreteMutableData?
import UIKit
let key: String = "some_key"
let value: String = "some_value"
UIPasteboard.general.items = [[key: value]]
let item = UIPasteboard.general.items.first
if let item = UIPasteboard.general.items.first {
switch item[key] {
case let x as String:
print("This is expected")
case let x as Any:
type(of: x)
print("This is unexpected")
default:
print("This is unexpected")
}
} else {
print("This is unexpected")
}
И я заметил, что String
, что я вложил в картон фактически получает мостик обратно как NSConcreteMutableData
.
Мои вопросы следующие:
Это вызвано внутренней реализации UIPasteboard (то есть явно превращающего от
NSString
кNSConcreteMutableData
), или это стандартный ObjC-Swift поведение шунтирование?Как я могу обойти это, чтобы хранить пользовательские пары ключ/значение в UIPboardboard?
Вот как это выглядит на детской площадке, для удобства:
Обратите внимание, что если вы импортируете MobileCoreServices', вы можете использовать 'kUTTypeText as String' в качестве своего ключа вместо hardcoding' 'public.text" ', если вы хотите указать UTI. –