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

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

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

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

Q&A

解決済

2回答

2030閲覧

配列が空になる理由を教えて下さい

KTH

総合スコア86

Swift

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

0グッド

0クリップ

投稿2019/08/14 12:05

数日ぶりに使おうとすると配列が空になり「Fatal error: Can't form Range with upperBound < lowerBound」というエラーが出てしまいます

なにか仕様の変更があったのですか?

swift

1 2import UIKit 3import Foundation 4import SafariServices 5import WebKit 6 7let チャートの余分な分削除用:Int = 9 8 9 10 11var oo:[String] = []//52週高値用 12var todayStocks:[String] = [] 13var a:Int = 0 14var b = a - 1 15class ViewController: UIViewController { 16 17 18 @IBAction func ChartDo(_ sender: Any) { 19 showSafariVC(for: todayStocks[a]) 20 a = a + 1 21 b = a - 1 22 23 24 let counter = todayStocks.count 25 switch a { 26 case 0..<counter: 27 NowChart.text = String(oo[b]) 28 default: 29 NowChart.text = "Sorry! GameOver!" 30 } 31 } 32 33 override func viewDidLoad() { 34 super.viewDidLoad() 35 let urlString = "https://www.nasdaq.com/aspx/52-week-high-low.aspx" 36 37 guard let url = URL(string: urlString) else { return } 38 39 let task = URLSession.shared.dataTask(with: url) { 40 (data, response, error) -> Void in 41 if let urlContent = data { 42 let webContent:String! = String(data: urlContent, encoding: .utf8) 43 44 45 let regex = try! NSRegularExpression(pattern: "<a href=\"https://www.nasdaq.com/symbol/.*\">(.*)</a>", options: []) 46 let matches = regex.matches(in: webContent, options: [], range: NSRange(location: 0, length: (webContent as NSString).length)) 47 let result = matches.map { (webContent as NSString).substring(with: $0.range(at: 1)) } 48 49 let countResult = result.count - チャートの余分な分削除用 50 oo += result 51// 52 print(matches) 53 54//ここまで 〜〜〜〜〜〜〜〜〜〜〜〜〜 55 56 for str in oo[0...countResult]{ 57 let aa:String = "https://www.marketwatch.com/investing/stock/(str)/charts" 58 todayStocks.append(aa) 59 60 61 // 62 } 63 // print(todayStocks) 64 65 } 66 67 68 69 } 70 task.resume() 71 72 // 表示部各部 73 74 NowChart.text = "NowChart" 75 76 77 } 78 func showSafariVC(for url: String){ 79 guard let url = URL(string: url) else { 80 return 81 } 82 let safariVC = SFSafariViewController(url: url) 83 present(safariVC,animated: true) 84 print(a) 85 } 86 87 88} 89 90 91 92 93

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

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

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

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

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

y_waiwai

2019/08/14 12:08

どこの配列が空になったんでしょう
KTH

2019/08/14 12:32

regexから配列が空になってしまいます
gentaro

2019/08/14 13:27

回答者に余計な手間与えないように、どのメソッドのどの箇所かを明記した方がいい。 あと > なにか仕様の変更があったのですか? なんの仕様の話をしたいんだろう?
guest

回答2

0

自己解決

正規表現を書き直したらうまくいきました

投稿2019/08/15 06:39

KTH

総合スコア86

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

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

0

エラーをよく読み解きましょう。
Can't form Range with upperBound < lowerBound

と書いてあるので、Range周りがおかしいようです。
例えば、5文字しかないとこで、6文字目を取ってこいと書いていたりするって事です。
printを駆使し、Rangeのあたりの値を出力し、修正してみてください。

おそらくですが、URLをワイルドカードで記入しているので、
その中の変化で使えなくなったのではないでしょうか?

投稿2019/08/15 05:16

hameji

総合スコア1380

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問