1. Swift / Говнокод #25669

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    import SwiftUI
    
    
    struct LandmarkDetail: View {
        @EnvironmentObject var userData: UserData
        var landmark: Landmark
    
    
        var landmarkIndex: Int {
            userData.landmarks.firstIndex(where: { $0.id == landmark.id })!
        }
    
    
        var body: some View {
            VStack {
                MapView(landmark: landmark)
                    .frame(height: 300)
    
    
                CircleImage(image: landmark.image(forSize: 250))
                    .offset(y: -130)
                    .padding(.bottom, -130)
    
    
                VStack(alignment: .leading) {
                    HStack {
                        Text(landmark.name)
                            .font(.title)
    
    
                        Button(action: {
                            self.userData.landmarks[self.landmarkIndex].isFavorite.toggle()
                        }) {
                            if self.userData.landmarks[self.landmarkIndex].isFavorite {
                                Image(systemName: "star.fill")
                                    .foregroundColor(Color.yellow)
                            } else {
                                Image(systemName: "star")
                                    .foregroundColor(Color.gray)
                            }
                        }
                    }
    
    
                    HStack(alignment: .top) {
                        Text(landmark.park)
                            .font(caption)
                        Spacer()
                        Text(landmark.state)
                            .font(.caption)
                    }
                }
                .padding()
    
    
                Spacer()
            }
            .navigationBarTitle(Text(landmark.name), displayMode: .inline)
        }
    }

    https://developer.apple.com/tutorials/swiftui/handling-user-input

    Принципиально новый нескучный "декларативный" UI от компании Apple. В наличии:
    * магические константы
    * спагетти из замыканий
    * биндинги, страшные как атомная война
    * где-то внутри модная хипстерская реактивная либа

    На фоне этого кошмара qml кажется вершиной инженерной мысли

    Запостил: Desktop, 08 Июня 2019

    Комментарии (41) RSS

    • #seo #кровавая_эпплня
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Яка лудост е!
      Ответить
    • Заметил закономерность: прогресс цивилизации ведёт к ее погибели. Поначалу кто-то создаёт язык - вполне годный, но чуть сыроватый. Он продаёт или дарит его какой-то компании, там за него берутся другие разработчики и доводят до более высокой кондиции. Затем за дело принимаются третьи руки: язык опять начинает совершенствоваться, посыпаться сахаром, появляются новые конструкции - но вот незадача: конечный продукт гораздо хуже промежуточного, хоть и имеет несомненные преимущества перед тем, что было вначале. Тогда за него принимается четвертая группа разрабов, неумолимо и методично превращая язык в конченное говно.
      Ответить
    • Именно поэтому я за " SwiftForth":
      { ====================================================================
      SIMPLE Dialog box example
      
      Copyright (C) 2001 FORTH, Inc.
      ==================================================================== }
      
      OPTIONAL SIMPLE A modal dialog template which uses catch/throw.
      
      DIALOG (SIMPLE)  [MODAL  " Press counter"      10   10  160   40
         (FONT 8, MS Sans Serif) ]
      
      \  [control        " default text"     id    xpos ypos xsiz ysiz ]
         [DEFPUSHBUTTON  " OK"               IDOK   105   20   45   15 ]
         [PUSHBUTTON     " Clear"            103     05   20   45   15 ]
         [PUSHBUTTON     " Throw"            104     55   20   45   15 ]
         [RTEXT                              101     05   05   18   10 ]
         [LTEXT          " Total errors"     102     25   05   50   10 ]
      
      END-DIALOG
      
      : SIMPLE-CLOSE ( -- res )   HWND 0 EndDialog ;
      
      VARIABLE PRESSES
      
      : .PRESSES ( -- )   HWND 101 PRESSES @ 0 SetDlgItemInt DROP ;
      
      : THROWING ( -- )   -1 THROW ;
      
      : STUPID ( -- )   ['] THROWING CATCH IF PRESSES ++ .PRESSES THEN ;
      
      [SWITCH SIMPLE-COMMANDS ZERO  ( -- res )
         IDOK     RUN: SIMPLE-CLOSE ;
         IDCANCEL RUN: SIMPLE-CLOSE ;
         103      RUN: PRESSES OFF  .PRESSES 0 ;
         104      RUN: STUPID 0 ;
      SWITCH]
      
      [SWITCH SIMPLE-MESSAGES ZERO
         WM_CLOSE      RUNS SIMPLE-CLOSE
         WM_INITDIALOG RUN: ( -- res )   0 PRESSES !  .PRESSES  -1 ;
         WM_COMMAND    RUN: ( -- res )   WPARAM LOWORD SIMPLE-COMMANDS ;
      SWITCH]
      
      :NONAME ( -- res )   MSG LOWORD SIMPLE-MESSAGES ;  4 CB: RUNSIMPLE
      
      : SIMPLE
         HINST  (SIMPLE)  HWND  RUNSIMPLE  0  DialogBoxIndirectParam DROP ;
      
      CR CR .( Type SIMPLE to run the dialog sample.) CR CR
      Правда гуй у него только для винды есть.
      Ответить
      • > гуй
        Винапи вместо гуя.
        Ответить
        • Ну тут не голый винапи, посмотри на описание диалога и обработку сообщений, всё довольно красиво и декларативненько.
          Ответить
          • > не голый винапи
            > красиво
            Ты серьёзно? Открой любой сишный пример по винапишным диалогам и найди 10 отличий...

            > описание диалога
            Обычный винапишный .rc файл в овечьей шкуре. Даже айдишки вручную придумывать надо. Вот только в оригинале эту хуйню можно было наформошлёпить, а тут?

            > обработка сообщений
            Винапишных сообщений через свичи как в сишке, охуеть декларативность.

            А внизу вообще ехал хвынд через лпарам...
            Ответить
            • > .rc файл
              Но всё таки нет, это программный кот, да к тому же расширяемый. Прямо в сишкокоде такого не напишешь.

              > можно было наформошлёпить, а тут?
              Что-то я не нашёл такого :(

              > через свичи как в сишке, охуеть декларативность.
              Свитчь —– декларативная конструкция, к тому же здесь нет явных вызовов многих функций которые были бы в сишкокоде, и циклы писать не надо.

              А ещё эту фигню можно набирать репле и тут же тестировать!
              Ответить
              • В визуал студии был редактор этих rc'шек.

                > прямо в сишкококоде
                Напишешь. Макросами высрать эту пачку DLGITEMTEMPLATE не составляет труда. Функциями в рантайме - тем более.

                > репле
                Это фича форта, а не этой тончайшей говнообёртки над винапи.
                Ответить
            • Просто тут применён незаконный чит, благодаря которому даже винапи смотрится няшным.
              Этот чит ­— тарасоформатирование™.
              Ответить
          • показать все, что скрытоvanished
            Ответить
      • показать все, что скрытоvanished
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий