- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Swift 中,如何定义类型符合 Equatable 的泛型数组?
例子:
struct File<T: Equatable> {
public var lines: [T]
private var lineCursor = 0
public var currentLine: T {
get { return lines[lineCursor] }
set { lineCursor = lines.index(where: { $0 == newValue }) ?? 0 }
}
}
struct Folder {
public var files: [File]? // compile time error
}
→ 对泛型类型"file"的引用需要 <…> 中的参数
……到目前为止我试过:
[File<Any>]
→ 类型“Any”不符合协议(protocol)“Equatable”
[File<Any: Equatable>]
→ 一行中连续的声明必须用';'分隔
[File<Any, Equatable>]
→ 通用类型"file"特化了太多类型参数(得到 2 个,但预期为 1 个)
[File<Any & Equatable>]
→ 不支持使用“Equatable”作为符合协议(protocol)“Equatable”的具体类型
[File<(Any: Equatable)>]
→ 无法创建带有元素标签的单元素元组
[File<(Any, Equatable)>]
→ 类型“(Any, Equatable)”不符合协议(protocol)“Equatable”
[File<(Any & Equatable)>]
→ 不支持使用“Equatable”作为符合协议(protocol)“Equatable”的具体类型
[File<[Any: Equatable]>]
→ 'File' 要求 'Equatable' 符合 'Equatable'
[File<[Any, Equatable]>]
→ 一行中连续的声明必须用';'分隔
[File<[Any & Equatable]>]
→ 'File' 要求 'Equatable' 符合 'Equatable'
正确的语法是什么?
[编辑] 简化示例
[编辑] 更新示例:
class File<T: Equatable> {
var lines = [T]()
var lineCursor: Int = 0
var currentLine: T {
get { return lines[lineCursor] }
set { lineCursor = lines.index(where: { $0 == newValue }) ?? 0 }
}
var visible = true
}
class Folder {
var files = [File]() // Generic parameter 'Type' could not be inferred; I want this to be a mixed array
func currentLinesFromVisibleFiles() -> String {
return files.filter({ $0.visible }).map({ String(describing: $0.currentLine) }).joined(separator: "/")
}
}
var stringFile = File<String>()
stringFile.lines = ["strong", "string", "a", "b", "c"]
stringFile.currentLine = "string"
stringFile.visible = true
var intFile = File<Int>()
intFile.lines = [6, 12, 0, 489]
intFile.currentLine = 489
intFile.visible = true
var doubleFile = File<Double>()
doubleFile.lines = [92.12, 4.9753, 1.6]
doubleFile.currentLine = 92.12
doubleFile.visible = false
var boolFile = File<Bool>()
boolFile.lines = [true, false]
boolFile.currentLine = true
boolFile.visible = true
var folder = Folder()
folder.files = [stringFile, intFile, doubleFile, boolFile]
let output = folder.currentLinesFromVisibleFiles() // I want: "string/489/true"
最佳答案
您必须指定 T
的类型[File<T>]?
上的参数为了让编译器通过,请注意您正在尝试创建一个同构数组,一旦您指定 T
作为最终类型,您不能在 file
上混合类型,即你不能混合 File<Int>
和 File<String>
.如果您需要 Equatable
一致性计算currentLine
您可以使用符合条件的动态添加属性是否天气 T
是平等的,因为:
protocol HasCurrentLine{
associatedtype LineType
var currentLine: LineType { set get }
}
struct File<T> where T:Any {
public var lines: [T]
var lineCursor = 0
}
extension File : HasCurrentLine where T : Equatable{
typealias LineType = T
var currentLine: T {
get { return lines[lineCursor] }
set { lineCursor = lines.index(where: { $0 == newValue }) ?? 0
}
}
}
struct Folder {
public var files: [File<Any>]?
}
这样你就可以在T
时计算行数是Equatable
关于Swift:类型符合 Equatable 的泛型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50319072/
嗨,我是 Flutter 的新手,我正在尝试了解 block 计时器 In the doc of flutter_bloc我会知道这个构造函数类是什么意思 @immutable abstract cl
更新: 从包含 Swift 4.1 的 Xcode 9.3 开始,数组相等性按预期工作,原始问题中的代码编译没有错误。 但是,请查看已接受的答案,因为它提供了更好、更现代的解决方案。 原题如下: 当我
我收到了一个 100 页的 Latex 文档,其中包含 $$...$$ 之间的所有方程,我需要将它们全部更改为 \begin{equation}...\end{equation} 在 Latex(一些
I have 5 equations and I've to take combination of 3 equations at a time to check if I'm getting
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10年前关闭。 Improve this
我想在 Modelica 中建模一个显式时间相关的微分方程。 说我想建模 Real x(start=1); der(x) = t; 在 Modelica 中。访问时间变量 t 的正确方法是什么? 最佳
我在 Maxima 中有一个微分方程组。我正在尝试绘制解决方案。 diff_eq1: 'diff(p(t),t) = (5/2 + (3^(1/2))/24 - (5/8)*p(t) - ((3^(1
基本上我只想解决k。请注意,等式等于 1.12 import math from sympy import * a = 1.45 b = 4.1 c = 14.0 al = math.log(a, 2
计算日出/日落时如何考虑观察者海拔? 计算任何纬度/经度的日出/设置是没有问题的,但是如何计算海拔而不是海平面???我已经用完了可以尝试的组合,并且花了三天多的时间来寻求帮助 我正在使用 Paul S
有人能给我一个为什么这不起作用的充分理由吗: let a: [Int]? = [1] let b: [Int]? = nil a == b 这将是我提出的(如果不优雅的话)解决方案。但这是微不足道的,
我正在尝试定义一个符合 Equatable 的测试夹具,以便我可以验证采用协议(protocol)的函数是否按预期执行。我尝试了 3 种不同的排列方式。 import XCTest import My
我确实需要将任何等同的结构/类型/对象传递给此 setEquatable 函数。知道如何解决这个问题吗? public func ==(l: [String: String], r: [String:
这个有效: // Conformance to protocol correctly synthesized by compiler struct MyStruct: Equatable { } 这不
我仍在与 Swift 泛型作斗争。今天我发现如果从泛型类调用我的 Equatable 协议(protocol)实现不起作用。 我的模型类: func ==(lhs: Tracking, rhs: Tr
谁能给我一个很好的理由来说明为什么这不起作用: let a: [Int]? = [1] let b: [Int]? = nil a == b 这将是我提出的(如果不雅)解决方案。但这是微不足道的,所以
题目地址:https://leetcode.com/problems/solve-the-equation/description/ 题目描述: Solve a given equation an
我正在尝试像这样解决这个指数方程: my ($l,$r); for (1 .. 100) -> $x { $l = $x * e ** $x; $r = 5 * (e ** $x -
我正在尝试用这段代码求解方程: a = [-0.0008333 -0.025 -0.6667 -20]; length_OnePart = 7.3248; xi = -6.4446; yi = -16
我正在处理一个说要使用这个 16 位循环冗余校验的设备: CCITT CRC-16 with polynomial x^16 + x^12 + x^5 + x^1 我寻找了这种算法的实现,但我确实只找
我在 hackerrank.com 上的“方程”挑战赛的一些测试用例上遇到了问题。这是问题所在:https://www.hackerrank.com/challenges/equations . 我很
我是一名优秀的程序员,十分优秀!