2015-04-09 16 views
5

Próbuję dowiedzieć się, jak zdefiniować typ Swift za pomocą cukru syntaktycznego. Podobnie jak jabłko nadało strukturze Array możliwość zdefiniowania go w obie strony: Array​<​String​> i [​String​], w jaki sposób mogę zrobić to samo dla MyStruct?Jak zrobić własny cukier syntaktyczny w szybkim tempie?

+0

Co dokładnie chcesz osiągnąć? Czy zdefiniowanie struct dwojaki sposób doda wiele? –

+0

Próbuję zdefiniować mój własny cukier syntaktyczny, taki jak Apple zrobić ze strukturą Array, uważam, że Swift daje mi tę funkcjonalność. Głównie robię to, aby lepiej zrozumieć architekturę języka. –

Odpowiedz

3

W pewnym sensie możesz i nie możesz tego zrobić.

Nie można zdefiniować typu ze skrótem, takim jak [String]. Nie można na przykład zdefiniować nowej połączonej listy i nadać jej skrótu ‹String›.

Co może zrobić jest wdrożyć ArrayLiteralConvertible, dzięki czemu można stworzyć swoją listę takiego:

let mylist: List = ["Elsa","Anna"] 

wdrażając ArrayLiteralConvertible:

struct List<T> { 
    // your List implementation 
} 

extension List: ArrayLiteralConvertible { 
    init(arrayLiteral: T...) { 
     // populate list from from arrayLiteral 
    } 
} 

Set jest przykładem takiego rodzaju, że robi to. Tablice są domyślne, ale możesz tworzyć zestawy z let myset: Set = [1,2,3].

Podobnie można zaimplementować StringLiteralConvertible (let r: Regex = "^abc.*def$"), ale nie można utworzyć skrót let r = /^abc.*def$/ tylko projektanci językowe mogą zrobić.

+1

I powiedz mu o zdefiniowaniu swoich własnych operatorów. – matt

+2

Prawdę mówiąc, jest wystarczająco dużo surowego cukru syntaktycznego, aby dać komukolwiek problemy dietetyczne ... –

+1

Chcę powiedzieć, że Array nie jest częścią szybkiego języka, ale jest częścią szybkiej biblioteki standardowej. Tak więc szybki język daje zdolność do szybkiej biblioteki standardowej, aby nazwać ją strukturą , a następnie dać jej zdolność inicjalizacji cukru. Jeśli więc sprawna biblioteka pozwala na to standardowa biblioteka, powinna również pozwolić każdemu, kto to zrobi. Czy się mylę? –

Powiązane problemy