我正在使用Swift 4。
我想定义一个问题。
问题由问题和答案组成。
问题可能是以下任意一项:字符串,整数,[整数],图像,[图像]或未定义的某些新类型,或者可能是上述形式的某种组合。
答案也可以是上述任何一种,但是给定的问题可以具有不同类型的答案。
(例如问题=(图片,“这是哪种动物?”,答案=(“猫”))
所以我认为协议将是必经之路:
protocol Posable {
var pose: String { get }
}
protocol Answerable: Hashable {
var answer: String { get }
}
protocol Puzzle {
var problem: Posable { get }
var solution: Answerable { get }
}
我将“可回答的哈希”设置为“可哈希”是因为我希望能够比较答案并创建答案集。
但是我得到了解决方案:可回答的行:
'Protocol'Answerable'只能用作通用约束,因为它具有Self或关联的类型要求。
我知道为什么会这样...
任何人都可以对如何实现这一点提出任何建议,以免我遇到这个问题吗?
我热衷于在可能的情况下使用协议,部分是为了让我了解它们。
答案 0 :(得分:1)
我会用泛型解决它:
import UIKit
struct Posable<T> {
var pose: T
}
struct Answerable<T> {
var answer: T
}
extension Answerable: Equatable where T: Equatable {
static func ==(lhs: Answerable<T>, rhs: Answerable<T>) -> Bool {
return lhs.answer == rhs.answer
}
}
extension Answerable: Hashable where T: Hashable {
var hashValue: Int {
return answer.hashValue
}
}
struct Puzzle<T, U> {
var problem: Posable<T>
var solution: Answerable<U>
}
let image = UIImage() // Image of a cat
let pose = Posable<(UIImage, String)>(pose: (image, "What type of animal is this?"))
let solution = Answerable<String>(answer: "A cat")
let myPuzzle = Puzzle<(UIImage, String), String>(problem: pose, solution: solution)
泛型允许您编写非常可重用的代码!在这里,您可以将任何类用作问题或答案。
通过Swift类型固有:您还可以简化初始化:
let image = UIImage() // Image of a cat
let pose = Posable(pose: (image, "What type of animal is this?"))
let solution = Answerable(answer: "A cat")
let myPuzzle = Puzzle(problem: pose, solution: solution)
答案 1 :(得分:1)
我不确定,但是您可以从<div class="container">
<div class="item1">Item1</div>
<div class="item2">Item2</div>
<div class="item3">Item3</div>
<div class="item4">Item4</div>
<div class="item5">Item5</div>
</div>
中删除Hashable
。
Answerable