2017-03-28 23 views
5

() türünde bir parametre ileten bir olay alıyorum.Hızla '()' tipi nedir?

Bu boş bir mu ...?

Ben ifade bu tür bahsediyorum:

let x =()

+1

@xoudini: Tam olarak ilgili, ancak tam olarak aynı değil (bence). Bu soru tür olarak '()' hakkındadır. Burada '()' bir değerdir ve 'Void' ile değiştirilemez. 'Let x = Void' derlemez. –

+0

Burada bir değer olarak '()' nin açık kullanımları hakkında ilginç tartışma: [Boş tuplelerin() örneklerinin (yani, 'türkçe' Boşluk 'örneklerinin olası herhangi bir açık kullanımı var mı?] (Http://stackoverflow.com/q/34561452/2976878) – Hamish

+1

@MartinR İyi nokta ve başka bir bakışta, soruların tamamen aynı olmadığına katılıyorum. – xoudini

cevap

4

() bir tip (ve Void boş demet türü için bir tür takma) ve bu tip tek değeri hem de. Yani

let x =() 

değeri() ile tip() (aka Void) sabit bir özelliği olarak x tanımlar.

Eşdeğer ifadeleri bir tür ama bir değerdir değil

let x = Void // error: expected member name or constructor call after type name 

Void çünkü

let x:() =() 
let x:Void =() 

ama olurdu. fonksiyon türlerini tanımlarken

hiçbir parametreleri ve/veya herhangi bir dönüş değeri ile hiçbir dönüş değeri için, boş bir parametre listesi için ve Void() kullanmak için bir konsensüs var gibi görünüyor. Bu, örneğin, UIKit tamamlama işleyicilerinde veya GCD gönderim sıralarına gönderilen yürütme bloklarında görülebilir;

func sync(execute block:() -> Void) 
+2

A, hem (() ->() "ve" (Void) -> Void "seçeneklerine rağmen, parazitsiz ve dönüş değeri olmayan işlevlerin tanımlanmasına ilişkin fikir birliğinin"() -> Void "olduğunu eklemektedir. – Sulthan

+0

@Sulthan: Haklısınız ve öneri için teşekkürler. Ancak, henüz bulamadığım bir referansla bunu yedeklemeyi tercih ederim. –

+0

Tüm tamamlayıcılar için Apple referans belgelerini saymazsanız, bir referans olduğunu düşünmüyorum :) – Sulthan

2

Evet, boş kayıt düzeni aka Void bu.

standart Void tip olarak tanımlanır:

typealias Void =() 

açıkça bir dönüş türünü belirtmeyen işlevlerin dönüş türü; boş bir tuple (yani, ()).

2

Swift grammar için docs baktığımızda:

Tüm tanımlama grubu türleri boş tuple türü için type alias olan Void, () hariç iki veya daha fazla türlerini içerir.

tuple-type → (­)­ | (­ tuple-type-element­ , ­tuple-type-element-list­)­ 
tuple-type-element-list → tuple-type-element­ | tuple-type-element ­, ­tuple-type-element-list­ 
tuple-type-element → element-name­ type-annotation­ | type­ 
element-name → identifier­ 

nedenle evet sıfır türleri/elemanlarının bir demet olup.

+1

, dilbilgisi belgelerinden de. > * Tüm tuple tipleri, boş tuple türü için bir tür takma ad olan 'Void' haricinde iki veya daha fazla türde içerir, '()' *. –

+0

@GabrielePetronella Bu cümleyi işaret ettiğiniz için teşekkür ederim. – luk2302

İlgili konular