设置器中的快速返回值
问题描述:
我需要从setter中返回一个字符串,我该怎么做?下面是代码:设置器中的快速返回值
func example()->String{
var _a = 5
var a: Int{
set(newValue){
_a = newValue
if _a < 0{
//return a string here!!
}
}get{
return _a
}
}
a = 0
}
答
不,你不能做到这一点很遗憾,但是这将是相当混乱,如果你能做到这一点呢。
我们都知道闭包是Swift中的一等公民,闭包可以嵌套。你在这里做的是在另一个闭包中放置一个闭包,并试图从内闭包中返回一个值。然而,即使闭包可以嵌套,两个不同的闭包是两个不同的闭包。将嵌套闭包想象成非嵌套闭包。当然,你可以在内部封闭使用值从外罩:
func a(x: Int) {
func b() {
// use x here
}
}
但是,这东西,你可以用2个非嵌套封做的一样好。你所要做的是通过从内罩返回一个值,使外部封闭回报:
func a() -> String {
func b() {
return ""
}
b()
}
这简直是不可能的2个非嵌套关闭:
func a() -> String {
b()
}
func b() {
return ""
}
不管怎么说,如果你真的可以做到这一点,将很难理解你的代码。作为代码的读者,人们会希望得到一个返回语句,指出准确返回的值。他们不希望
a = 0
返回的东西。他们将不得不查看a
的二传手以了解封闭将返回什么样的价值。这是很多在代码中查找和查看的,这非常不方便。
setter只设置值不返回。但是你可以在你的'example'方法中使用变量 –
从逻辑上讲,你不能*返回* setter中的值* ... –
为什么你想要返回集合中的任何值?它有什么用处? – Sahil