2017-04-17 81 views
1

我需要從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 
} 
+0

setter只設置值不返回。但是你可以在你的'example'方法中使用變量 –

+0

從邏輯上講,你不能*返回* setter中的值* ... –

+1

爲什麼你想要返回集合中的任何值?它有什麼用處? – Sahil

回答

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的二傳手以瞭解封閉將返回什麼樣的價值。這是很多在代碼中查找和查看的,這非常不方便。