1

我正在将一些代码从 Swift 4.0 移动到 4.2,并且在使用 UIAccessibilitySpeechAttributePitch 时遇到了问题。在我的 Swift 4.0 文件中,我使用了:

NSAttributedStringKey(rawValue: UIAccessibilitySpeechAttributePitch)

即使在 Swift 4.0 中NSAttributedStringKey.accessibilitySpeechPitch,出于某种原因,我也不能直接将其用作 ,但我可以通过使用原始值进行初始化来解决这个问题。我似乎无法在 Swift 4.2 中做到这一点。

如果我尝试

NSAttributedString.Key(rawValue: UIAccessibilitySpeechAttributePitch)

在 Swift 4.2 中,我得到

具有相同类型“NSAttributedString.Key”作为参数的无效初始化程序调用

所以很明显UIAccessibilitySpeechAttributePitch被认为是一个NSAttributedString.Key. 但是,如果我直接使用它,我会得到:

“UIAccessibilitySpeechAttributePitch”已重命名为“NSAttributedString.Key.accessibilitySpeechPitch”

建议的修复

将“UIAccessibilitySpeechAttributePitch”替换为“NSAttributedString.Key.accessibilitySpeechPitch”

所以我单击“修复”按钮将其更改为NSAttributedString.Key.accessibilitySpeechPitch,然后我得到

类型“NSAttributedString.Key”没有成员“accessibilitySpeechPitch”

UIAccessibilitySpeechAttributePitch如果我在没有先将其更改为的情况下单击命令NSAttributedString.Key.accessibilitySpeechPitch,我会在 UIKit 的 UIAccessibilityConstants 中得到这个声明:

extension NSAttributedString.Key {
//other stuff
    @available(iOS 7.0, *)
    public static let accessibilitySpeechPitch: NSAttributedString.Key
//other stuff
}

所以,它显然存在,但是,我的代码如何使用它?除了 UIKit 之外,我还需要为可访问性常量导入一些额外的东西吗?

编辑:我的实际代码(仅更改了一些变量名)如下:

static let someColour=#colorLiteral(red: 1, green: 0.5763723254, blue: 0, alpha: 0.5)
static let attributes=[
    NSAttributedString.Key.backgroundColor: someColour,
    NSAttributedString.Key.strokeWidth: -3.0,
    NSAttributedString.Key.accessibilitySpeechPitch: 1.3
    ]
    as [NSAttributedString.Key : Any]

我试过干净的建筑。我正在使用 Xcode 版本 10.0 (10A255)

4

1 回答 1

1

尝试

改进 UIKit

因为accessibilitySpeechPitch存在于UIKit -> NSAttribute文件中,可以在extension NSAttributedString.Key

有效

于 2019-04-24T09:54:45.230 回答