質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

8661閲覧

Swift エラー Initializer for conditional binding must have Optional type , not '[HTMLElemet]'

hisui123

総合スコア21

iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/08/15 02:45

###前提・実現したいこと

RSSリーダーアプリを作成しています。
こちらを参考に進めていました。
http://x1.inkenkun.com/archives/909

あらかた、ライブラリ等を入れて、
ビルドしましたが、エラーが出ました。

###発生している問題・エラーメッセージ

if let ogTags = html.nodesMatchingSelector("meta[property=\"og:description\"]") { と、 if let imgTags = html.nodesMatchingSelector("img") { のコードについて、 以下のエラーメッセージ Initializer for conditional binding must have Optional type , not '[HTMLElemet]'

###該当のソースコード

Swift

1 2 3import UIKit 4import Alamofire 5import SwiftyJSON 6import HTMLReader 7 8class parseFeed{ 9 10 /* 11 RSSのJSONをパースする 12 */ 13 func parse (url: String, completion: (([JSON]?, NSError?) -> Void)){ 14 15 var url = NSURL(string: url) 16 17 Alamofire.request(.GET, url!, parameters: nil, encoding: .JSON) 18 19 .responseJSON {(response) in 20 21 let json = JSON(response.data!) 22 let entries = json["responseData"]["feed"]["entries"].array 23 24 completion(entries, response.result.error) 25 26 } 27 28 29 30 31 32 } 33 34 35 /* 36 URL先の文章と画像を取得 37 */ 38 func getContents (url: String, completion: ((AnyObject, NSError?) -> Void)){ 39 40 var url = NSURL(string: url) 41 var ret : Dictionary<String, String!> = [:] 42 43 Alamofire.request(.GET, url!, parameters: nil) 44 45 .responseString { (response) in 46 47 48 let data = JSON(response.data!) 49 50 var content = "" 51 let html = HTMLDocument(string: String(response.data)) 52 53 54 55 if let ogTags = html.nodesMatchingSelector("meta[property=\"og:description\"]") { 56 for tag in ogTags { 57 content = (tag.attributes?["content"] as? String)! 58 } 59 } 60 61Initializer for conditional binding must have Optional type , not '[HTMLElemet]' 62 63 64 65 var image = "" 66 if let imgTags = html.nodesMatchingSelector("img") { 67 for img in imgTags { 68 if(img.attributes?["data-src"] != nil){ 69 image = (img.attributes?["data-src"] as? String)! 70 } 71 } 72 } 73 74 ret = [ "content": content , "image" : image ] 75 completion(ret,response.result.error) 76 } 77 } 78 79} 80 81 82

###試したこと

同様のエラーの検索を行い、
http://hacknote.jp/archives/16247/
以下の方法を見つけたが、
宣言の仕方がわからない。

他、

[Swift][Optional] アンラップしているはずなのに、アンラップされない

http://qiita.com/cotrpepe/items/3958a6863f1e412073e1

または、別の方法を模索しています。

エラーの解消を行うための、修正コードを教えて頂きたいです。

よろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

自己解決

Int型でNSUserDefaultsを参照しようとするとオプショナル関連エラーが出てしまう

https://teratail.com/questions/40453

こちらのページで、as Optional
を追加する事で、エラーが消えました。

自己解決しました。

投稿2016/08/15 03:31

hisui123

総合スコア21

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

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

_Kentarou

2016/08/15 03:57 編集

本来はメソッドの戻り値がOptionalを返さない仕様なのでif letを外す方が正しい対応かと自分は思います。
hisui123

2016/08/16 12:09

まだOptionalについての理解が進んでいませんでした。 エラーが消えたは良いが、これでいいのかという違和感はありました。 ありがとうございます。
hisui123

2016/08/20 15:16

追記 import HTMLReader により、HTMLDocumentについてのエラーが消えました。 cocoapodsにより、追加。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問