2015-08-31 2 views
-1

My 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.

В быстром вы создаете массив.

Удалить их.

Следующий бит заключается в том, что метод создает необязательную строку. Вам нужно развернуть его, прежде чем вы сможете использовать строку.

Прочтите быструю книгу, доступную бесплатно от Apple. Все это объясняется там. Вы должны прочитать это, прежде чем отправлять больше вопросов о SO, так как они ответят на них.

+0

Я скопировал и вставил код, и я получаю сообщение «ожидается» {после условия «если» с 'if let urlContent = NSString (data: data, encoding: NSUTF8StringEncoding)' строка кода. & I am getting "use неразрешенного идентификатора 'urlContent' "после строки' let contentArray = urlContent.componentsSeparatedByString (""). –

+0

Почему вы отправляете комментарий к ответу FogMeister о коде, предложенном кем-то еще? Вернитесь назад и добавьте новый раздел в ваш вопрос, показывая ваш новый код и ошибки, которые генерирует этот новый код. И код Адама не должен был быть готовым к копированию/вставке. Это краткое изложение того, что вам нужно делать. (Утверждение после if, если в Swift должно быть заключенные в фигурные скобки. Вам нужно добавить фигурные скобки вокруг второй строки этого кода.) –

+0

@ DuncanC ok получил его. –

2

Как уже говорили вам, удалите квадратные скобки.

Другой бит информации о том, что метод, который вы используете,

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

Является «failable» метод инициализации. Вы можете указать знак вопроса после слова init в его определении. Это означает, что это может не сработать. Из-за этого результат метода init является необязательным. Так как это init для NSString, его тип возврата - необязательный NSString, или NSString?.

Вам необходимо развернуть дополнительный. Ответ Адама использует синтаксис if let, который называется «необязательным связыванием». Он сохраняет результат правой части выражения в новую константу (urlContent), если он не равен нулю, а затем запускает код после if. Если правая часть выражения IS nil, условный код пропускается.

Смежные вопросы