🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

2回答

558閲覧

データ型の使い方に関して

akak09

総合スコア5

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/11/15 15:57

参考書でRSSデータを解析しデータビューに表示するニュースリーダーアプリを作っていてvar item:Item?というコードが出てきました。これがオプショナル型であることはわかるのですが、型がなぜItemになっているのかがわかりません。型はstringやInt、float,doubleなどだけかと思っていました。
これはvar item:String?ではダメなのですか?
念の為全てのコードを載せておきます。

import UIKit class ListViewController: UITableViewController, XMLParserDelegate { var parser: XMLParser! var items = [Item]() var item : Item? var currentString = "" override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return items.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel?.text = items[indexPath.row].title return cell } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) startDownload() } func startDownload() { self.items = [] if let url = URL( string:"https://wired.jp/rssfeaeder/"){ if let parser = XMLParser(contentsOf: url){ self.parser = parser self.parser.delegate = self self.parser.parse() } } } func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI:String?, qualifiedName qName: String?, attributes attributeDict: [String: String]){ self.currentString = "" if elementName == "item"{ self.item = Item() } } func parser(_ parser:XMLParser, foundCharacters string: String) { self.currentString += string } func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { switch elementName { case "title": self.item?.title = currentString case "link": self.item?.link = currentString case "item": self.items.append(self.item!) default: break } } func parserDidEndDocument(_ parser: XMLParser) { self.tableView.reloadData() } }

以下は別ファイルのコードです。

import Foundation class Item { var title = "" var link = "" }

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

型はstringやInt、float,doubleなどだけかと思っていました。

だけではありません。

var item:String?ではダメなのですか?

ダメです

投稿2019/11/15 22:20

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コードにあるようにclass Itemを自作しています。
なので、let item:Item?として利用できることになります。

その意味としては、もちろんString型やInt型などの
Appleにより用意されている型でもいいのですが、

RSSの記事には"題名”、"リンク”がそれぞれにありますので、
それをバラバラに管理するよりも、1個の塊として処理した方が楽・合理的なので、
titleとlinkを持つItemを作成し、Item型に流し込んでいるのだと思います。

もちろん、Stringなどで管理することもでき、
使うのであれば、titles:[String], links:[String]とし、
0番目のtitleの時は、0番目のlink、
2番目のtitleの時は、2番目のlinkなどとして対応してあげれば
同様の動きは実現できると思います。

投稿2019/11/15 16:26

hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akak09

2019/11/16 15:36

とてもわかりやすく答えていただきありがとうございます! もう二点質問させてください。 1.Itemクラスを型にしたことによって、題名とリンクを一括で管理でき、一括で題名とリンクの情報を代入できるという理解であっていますか? 2.Itemクラスをインスタンスとして生成することで同じ効果を得られると思うのですが、この考えは違っていますか? 初学者故に理解が追いつかずすみません。何卒回答よろしくお願いいたします。
hameji

2019/11/22 13:33 編集

1. 正しいと思います。 2.インスタンスとして生成?よくわかりませんが、 string, stringを持つItemをインスタンスとして生成する方法はあるのですか? そもそもvar itemsとvar itemでインタンスとして生成しているのではないですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問