gpt4 book ai didi

ios - 是什么导致 UIPasteboard 中的项目被转换为 NSConcreteMutableData?

转载 作者:搜寻专家 更新时间:2023-11-01 07:18:23 28 4
gpt4 key购买 nike

我在 playground 中运行以下命令(我在 Xcode 7.3.1 和 Xcode 8.1 中进行了测试并看到了相同的行为):

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

我的问题如下:

  1. 这是由内部 UIPasteboard 实现引起的(即从 NSString 显式转换为 NSConcreteMutableData),还是这是标准的 ObjC-Swift 桥接行为?

  2. 如何解决此问题以在 UIPasteboard 中存储自定义键/值对?

为了便于引用,这是在 Playground 上的样子:

enter image description here

最佳答案

您为 item[key] 获得的 Data 只是字符串的 UTF-8 编码值。

如果添加以下 case,您将看到:

case let x as Data:
let str = String(data: x, encoding: .utf8)
print("str = \(str)")

造成混淆的原因是 items 属性使用的 key 是 UTI,而不是随 secret 钥。如果您将 key 更改为 public.text,那么您的代码将按预期工作。

通常,您不会使用 items 属性将字符串放在粘贴板上。您将使用 string 属性来读取和写入值。

UIPasteboard.general.string = "Hello"
let aStr = UIPasteboard.general.string
print("aStr = \(aStr)")

这样做避免了指定 UTI 的需要,也避免了替换粘贴板上的所有现有项目。

关于ios - 是什么导致 UIPasteboard 中的项目被转换为 NSConcreteMutableData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40559111/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com