问题标签 [rawrepresentable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
47 浏览

ios - Swift:将元组关联到枚举

有没有办法将元组关联到枚举?

例如:

我收到错误“A 不符合 RawRepresentable”

0 投票
1 回答
1987 浏览

swift - 如何制作描述字符串可表示枚举的协议?

我有一个方法可以调用某个管理器的方法来用某个键保存 int 值。我的方法接收 int 和一些 EnumKey 枚举值作为键,挤出 EnumKey 的 rawValue 并将其作为字符串传递给管理器:

我想通过允许我的方法接收每个带有字符串原始值而不是 EnumKey 的枚举来使其更通用。在方法的实现中,我将密钥参数的类型从 EnumKey 替换为 GenericKey 协议,并使 EnumKey 符合此协议:

但这String, GenericKey看起来有点难看。除了 RawRepresentable 和 String 原始类型之外,我希望每个字符串表示的枚举都能自动适应,而无需提及它符合 GenericKey 协议。就像是:

但是编译器说“协议只能用作通用约束,因为它具有 Self 或关联的类型要求”。

有什么简单的方法可以解释编译器协议仅描述具有 String 类型 RawValue 的 RawRepresentable 事物?

0 投票
4 回答
11887 浏览

ios - Swift 3.0 中的结构枚举

我正在尝试创建要初始化的结构的枚举:

我收到以下错误:

类型 AllStructs 不符合协议“RawRepresentable”

我假设不能以这种方式使用枚举。我们必须使用原语。

0 投票
4 回答
9622 浏览

swift - 原始类型 'Bool' 不能用任何文字表示

我想让我的枚举很容易兼容@IBInspectable,所以为了简单起见,我试图让它用 type 表示Bool

但是 Xcode 给了我:

原始类型 'Bool' 不能用任何文字表示

这很奇怪,因为true并且false似乎是通过文字表达的完美候选者。

我还尝试通过以下方式添加RawRepresentable与 Bool 类型的一致性:

但它并没有解决错误。

0 投票
1 回答
1595 浏览

swift - Struct 不符合 RawRepresentable 协议?

我这里有一个结构,当 Xcode 尝试编译它时会产生错误

我得到的错误是Type GATToIPPermissions does not conform to protocol RawRepresentable. 但是,我没有得到任何关于它为什么不符合的迹象。

你们中的任何人都能发现问题吗?

0 投票
2 回答
398 浏览

swift - 在不使用关联类型的情况下,您能否将协议中的变量限制为仅原始类型为 String 的 RawRepresentables?

我有一个案例,我试图定义一个函数,该函数接收一组对象,并要求每个对象都必须定义一个名为“Commands”的基于字符串的枚举。

下面是一个示例,说明如果您使用关联类型,您将如何做到这一点:

问题是由于关联类型,您不能这样做:

注意:我试图阻止某人这样做,这应该会导致编译失败,因为 Raw 类型不是字符串。

如何实现这个(或类似的)?

0 投票
1 回答
904 浏览

objective-c - Release 版本中 rawValue 的重新声明无效

我有一个混合项目,遇到了一个有趣的问题。有一个枚举,在 obj-c 中定义

接下来,有一个 swift 文件,其中定义了扩展名

在 Debug 配置中一切正常,但是当我切换到 Release 时它不会构建,说:'rawValue' 的重新声明无效 我尝试删除 typealias,用 String 替换 RawValue(因此协议可以隐式猜测值),使构造函数在协议中是可选的(并且隐式展开的可选) - 不行。

我确实理解用字符串扩展 Int 枚举有点奇怪,但为什么它停止在 Release 中构建并在 Debug 中绝对完美地工作?

是否有一些不同的机制来处理发布配置的枚举/类/扩展?

0 投票
2 回答
92 浏览

swift - 有没有办法根据最终都可以由特定类型表示的参数类型来简化这个“重载矩阵”?

我们正在尝试创建一个addQueryItem最终在内部使用字符串和可选字符串的函数。

为了在 API 中获得更大的灵活性,而不是String用于参数类型,我们改为使用CustomStringConvertible(String 实现的),因此我们可以使用任何可以表示为字符串的东西。

此外,因此我们可以传递String基于 it 的枚举,我们还希望它接受自身为 a 的RawRepresentable类型。RawValueCustomStringConvertible

然而,由于我们现在在技术上接受每个参数的两种不同类型的值,我们最终不得不为这两种类型的每种组合创建一个“重载矩阵”——总共四个。

我的第一个想法是通过扩展来使用面向协议的编程,RawRepresentable因此CustomStringConvertible如果它RawValue也是一个CustomStringConvertible. 然后我可以直接将它传递给接受两个CustomStringConvertible参数并消除其他三个参数的版本。但是,编译器不喜欢它,因为我正在尝试扩展协议,而不是具体类型。

由于无法执行上述操作,如前所述,我必须具备以下所有四个:

那么,既然看起来不可能RawRepresentable坚持CustomStringConvertible,还有其他方法可以解决这个“重载矩阵”问题吗?

0 投票
1 回答
314 浏览

swift - 如何使用泛型默认参数

这是我的代码:

它不编译。错误是:

“Child”类型的默认参数值无法转换为“T”类型

为什么不能转换?根据文档Child.someEnumRawRepresentable

带有原始值的枚举 对于任何带有字符串、整数或浮点原始类型的枚举,Swift 编译器会自动添加 RawRepresentable 一致性。在定义您自己的自定义枚举时,您可以通过将原始类型指定为枚举类型继承列表中的第一项来为其提供原始类型。

这也编译:

为什么它不能作为默认参数工作?

用例:我想接受任何RawPresentable值,所以我可以从中提取rawValue。我想提供一个默认值(总是“”)(我只是用 来创建一个结构rawValue = "")。我不想创建多个初始化程序,因为我有一些子类,这会变得一团糟。对我来说最好的就是提供一个默认RawRepresentable对象。

当我添加演员表时: init(ty: T = (Child.johnDoe as!T)) where T.RawValue == String {

或使其可空:

它编译。但现在我不能打电话:

它给出了错误:

无法推断通用参数“T”

0 投票
1 回答
1138 浏览

objective-c - Objc 可见字符串枚举但不是 RawRepresentable

我想使用在目标 C 和 Swift 中都可见但不符合协议 RawRepresentable 的枚举。

  1. 我试图让一个字符串枚举在 Objc 和 Swift 中都可见,因此我使用

    typedef NSString *myEnum NS_TYPED_ENUM;

  2. 我试图利用 myEnum(rawValue: ) -> myEnum? 函数,但我发现 enumType 已经自动符合

    public struct myEnum : Hashable, Equatable, RawRepresentable { public init(rawValue: String) }

我的问题是如何创建在 Objc 和 Swift 中可见但不符合此协议的枚举?感谢所有的帮助!