2015-08-31 57 views
-1

我的var contentArray = urlContent.componentsSeparatedByString("")是引發錯誤的代碼位。是因爲我使用NSString嗎?它也不會讓代碼完成工作,因爲它應該。'[NSString?]'沒有名爲'componentsSeparatedByString'的成員

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var city: UITextField! 
    @IBOutlet weak var message: UILabel! 

    @IBAction func buttonPressed(sender: AnyObject) { 

     var urlString = "http://www.weather-forecast.com/locations/" + city.text.stringByReplacingOccurrencesOfString(" ", withString: "") + "/forecasts/latest" 

     var url = NSURL(string: urlString) 

     let task = NSURLSession.sharedSession().dataTaskWithURL(url!){(data, response, error) in 

      var urlContent = [NSString(data: data, encoding: NSUTF8StringEncoding)] 
      var contentArray = urlContent.componentsSeparatedByString("") 
     } 
     task.resume() 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

回答

3

隨着括號([])要創建的陣列。只要刪除[]。下面的代碼應該可以工作。我還打開了可選的字符串。

if let urlContent = NSString(data: data, encoding: NSUTF8StringEncoding) 
{ 
    let contentArray = urlContent.componentsSeparatedByString("") 
} 
+0

我添加了一條評論@Duncan –

+1

@Adam,你錯過了if語句的條件部分的大括號。我加了他們。 –

2

該調用的方括號是因爲您一直在閱讀Objective-C教程。

在swift中,您正在創建一個數組。

刪除它們。

接下來的一點是該方法創建一個可選字符串。在使用字符串之前,您需要解開它。

閱讀可從Apple免費獲得的swift書。所有這些都在那裏解釋。在發佈任何關於SO的更多問題之前,您應該閱讀它,因爲它會回答所有問題。

+0

我複製並粘貼代碼&我得到的消息「預計」{後'如果'條件與'if let urlContent = NSString(數據:數據,編碼:NSUTF8StringEncoding)'代碼行。我越來越「使用在'let contentArray = urlContent.componentsSeparatedByString(「」)'代碼行之後未解析的標識符「urlContent'」 –

+0

爲什麼要發佈對FogMeister有關其他人建議的代碼的回覆的評論?回去並添加一個新的部分你的問題,顯示你的新代碼和新代碼產生的錯誤,Adam的代碼並不是要複製/粘貼就緒,這是你需要做什麼的概要(在Swift之後的if語句必須是用括號括起來,你需要在代碼的第二行加上大括號) –

+0

@DuncanC ok了,還是新的。 –

2

正如其他人告訴你的,刪除方括號。

信息的其他的一點是,你正在使用的方法,

convenience init?(data data: NSData, 
     encoding encoding: UInt) 

是一個「failable」 init方法。您可以通過定義中的init之後的問號來判斷。這意味着它可能無法工作。因此,init方法的結果是可選的。由於它是NSString的初始值,因此它的返回類型是Optional NSString或NSString?

您需要打開可選件。亞當的答案使用if let語法,稱爲「可選綁定」。它將表達式右側的結果保存爲一個新的常量(urlContent),如果它不爲零,則在if後面運行代碼。如果表達式的右邊沒有條件碼,則跳過。

相關問題