我不完全确定我想要做的事情目前可以实施,但是我希望它能够实现。
基本上,我希望有一些机制可以为原语创建更短的对象。让我解释。考虑我们在Int:
class Wrapper {
var value: Int = 0
init(value: Int) {
self.value = value
}
}
然后用init创建对象,即:
let wrapper = Wrapper(value: -1)
我想做这样的事情:
let wrapper: Wrapper = -1
或者:
var array = [Wrapper]()
array.append(-1)
它会严重缩短声明,特别是在数组的情况下 有趣的说明:我用CGFloat测试了上面的代码,即:
let val: CGFloat = 0.0
var array = [CGFloat]()
array.append(0.0)
所有似乎都运转正常。但是,我并不完全确定语言中是否存在允许为自定义对象创建此类行为的方式,这就是我基本上要求它的原因。我已经回顾了CGFloat的来源,但没有看到任何与我想要实现的功能相关的内容(除了NativeType别名可能,但我不明白它是如何工作的)
答案 0 :(得分:3)
像这样:
class Topic{
private final String topic;
private finaltopicName Collection<Question> questions;
Topic(String topic, Collection<Question> ... questions){
this.topic=topic;
this.questions=Arrays.asList(questions);
}
}
class Question{
private final String question;
private final Collection<String> answers;
Question(String question, Collection<String>... answers){
this.question=question;
this.answers=Arrays.asList(answers);
}
现在你可以说:
class Wrapper : ExpressibleByIntegerLiteral {
var value: Int = 0
required init(integerLiteral value: Int) {
self.value = value
}
init(value: Int) {
self.value = value
}
}