| ... | ... | |
|---|
| 10 | 10 | == 사용법 == |
|---|
| 11 | 11 | [[iced 구조.svg]] |
|---|
| 12 | 12 | iced는 기본적으로 위의 구조를 갖고 있다. 먼저 UI에서 사용자가 상호작용하면 update 로직에 보낼 Message 열거를 만들어보자 |
|---|
| 13 | | {{{#syntax rust |
|---|
| 13 | {{{#!syntax rust |
|---|
| 14 | 14 | enum Message { |
|---|
| 15 | 15 | Hello, |
|---|
| 16 | 16 | Bye |
|---|
| 17 | 17 | }}}} |
|---|
| 18 | 18 | 그리고 데이터를 담을 state 구조체를 만들자 |
|---|
| 19 | | {{{#syntax rust |
|---|
| 19 | {{{#!syntax rust |
|---|
| 20 | 20 | #[derive(Default)] |
|---|
| 21 | 21 | struct State { |
|---|
| 22 | 22 | say:String |
|---|
| 23 | 23 | }}}} |
|---|
| 24 | 24 | say의 기본값을 "hello"로 지정해주고 싶으면 derive 메크로를 제거하고 |
|---|
| 25 | | {{{#syntax rust |
|---|
| 25 | {{{#!syntax rust |
|---|
| 26 | 26 | impl Default for State { |
|---|
| 27 | 27 | fn default() Self { |
|---|
| 28 | 28 | Self { |
|---|
| ... | ... | |
|---|
| 31 | 31 | } |
|---|
| 32 | 32 | }}}}를 추가해주자.[* 사실 iced::application이라는 대응 함수도 있는데 부실한 문서화때문에 사용하기 어렵다] |
|---|
| 33 | 33 | 그리고 상호작용을 할 때 실행될 update 함수를 만들자 |
|---|
| 34 | | {{{#syntax rust |
|---|
| 34 | {{{#!syntax rust |
|---|
| 35 | 35 | fn update(state:&mut State, message:Message) { |
|---|
| 36 | 36 | match Message { |
|---|
| 37 | 37 | Hello => { |
|---|
| ... | ... | |
|---|
| 43 | 43 | } |
|---|
| 44 | 44 | }}}} |
|---|
| 45 | 45 | 마지막으로 UI를 담당할 view 함수를 만들고 |
|---|
| 46 | | {{{#syntax rust |
|---|
| 46 | {{{#!syntax rust |
|---|
| 47 | 47 | use iced::Element; |
|---|
| 48 | 48 | use iced::widget::{button, column, text}; |
|---|
| 49 | 49 | |
|---|
| ... | ... | |
|---|
| 55 | 55 | ].into() |
|---|
| 56 | 56 | }}}} |
|---|
| 57 | 57 | iced::run으로 실행하자 |
|---|
| 58 | | {{{#syntax rust |
|---|
| 58 | {{{#!syntax rust |
|---|
| 59 | 59 | fn main () -> iced::Result { |
|---|
| 60 | 60 | iced::run(update, view)? |
|---|
| 61 | 61 | }}}} |
|---|
| ... | ... | |
|---|