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?
Odpowiedz
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ć.
I powiedz mu o zdefiniowaniu swoich własnych operatorów. – matt
Prawdę mówiąc, jest wystarczająco dużo surowego cukru syntaktycznego, aby dać komukolwiek problemy dietetyczne ... –
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ą
- 1. Scala Mapa: tajemniczy cukier syntaktyczny?
- 2. Usuwanie cukier syntaktyczny: rozumienie listy w Haskell
- 3. Zrozumienie Scali: ważna cecha czy cukier syntaktyczny?
- 4. Czy reguły przepisywania GHC rozpoznają cukier syntaktyczny?
- 5. Generic cukier syntaktyczny lub prawdziwa poprawa
- 6. Silverlight Speex w szybkim tempie
- 7. Klasa anonimowa w szybkim tempie
- 8. Jak napisać ten kod w szybkim tempie?
- 9. UIView zmienia swoją pozycję w szybkim tempie.
- 10. Ukrywanie przyjęcia protokołu w szybkim tempie.
- 11. Nieskończona długość macierzy w szybkim tempie
- 12. Symulacja przesuwania UITableViewCell w szybkim tempie
- 13. Skonfiguruj precyzyjne linki w szybkim tempie?
- 14. Dlaczego potrzebuję podkreśleń w szybkim tempie?
- 15. ogniskowanie pola tekstowego w szybkim tempie
- 16. Zmiana wielkości klawiatury w szybkim tempie?
- 17. dodawanie wyszukiwaniaBar do nawigacjiBar w szybkim tempie
- 18. Pomnożenie zmiennych i dubletów w szybkim tempie
- 19. Jak utworzyć wideo z użyciem AVAssetWriter w szybkim tempie?
- 20. Jak zaktualizować dzisiejszy widget w szybkim tempie co x sekundę
- 21. Jak uwolnić typy CGRect, CGPoint w szybkim tempie?
- 22. Jak zainicjować UIBezierPath, aby narysować okrąg w szybkim tempie?
- 23. Jak wykryć komórkę tableView dotkniętą lub klikniętą w szybkim tempie
- 24. Jak dodać przecinki do numeru w szybkim tempie?
- 25. Jak poprawnie używać selektorów w szybkim tempie 4
- 26. Pobierz indexPath komórki w centrum kolekcjiWygląd w szybkim tempie?
- 27. Uruchamiaj akcję, gdy użytkownik kliknie komórkę w szybkim tempie.
- 28. Tworzenie i dodawanie wartości do słownika w szybkim tempie
- 29. Podejście do odczytywania dowolnej liczby bitów w szybkim tempie
- 30. Co jest alternatywą dla pchu w szybkim tempie?
Co dokładnie chcesz osiągnąć? Czy zdefiniowanie struct dwojaki sposób doda wiele? –
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. –