テキストコンポーネント
CoddyのRustジャーニー「Object Oriented Programming」セクションの一部 — レッスン 50/61。
チャレンジ
簡単前回のレッスンで作成した Draw トレイトを基に、最初の本格的なUIコンポーネントである TextField を追加しましょう。このコンポーネントは、ドキュメントシステムにおけるテキスト表示要素を表します。
新しいモジュールファイルを使用してプロジェクトを拡張します。
draw.rs: 前回のチャレンジで作成したDrawトレイトをそのまま保持します。text_field.rs: パブリックなcontentフィールド(String型)を持つTextField構造体を作成します。TextFieldに対してDrawトレイトを実装し、draw()を呼び出すとText: {content}という特定の形式でテキストが出力されるようにします。main.rs: 両方のモジュールを取り込み、TextFieldインスタンスを作成します。そのdraw()メソッドを呼び出してコンポーネントをレンダリングします。
text_field モジュールは draw モジュールの Draw トレイトを使用する必要があることに注意してください。両方のモジュールは同じクレートの一部であるため、crate::draw::Draw でアクセスできます。
以下の入力が提供されます:
- テキストフィールドの内容を表す文字列
出力は以下の形式に従う必要があります:
Text: Hello World自分で試してみよう
mod draw;
mod text_field;
use draw::Draw;
pub struct Label {
pub text: String,
}
impl Draw for Label {
fn draw(&self) {
println!("{}", self.text);
}
}
fn main() {
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let content = input.trim().to_string();
// TODO: TextFieldのインスタンスを作成し、その上でdraw()を呼び出す
}