Swift 2.0 и пусть предупреждения

У меня проблема в Swift 2.0

вот текущий блок кода, который я пишу:

let URL = NSURL(string:"www.google.com")

а затем я получаю следующее предупреждение: «Инициализация URL-адреса неизменяемого значения никогда не использовалась, рассмотрите возможность замены на присвоение «_» или удаление его.

Что мне делать, когда я хочу объявить let.

Я получаю аналогичное предупреждение, когда пишу var URL = NSURL(string: www.google.com)

Что я могу сделать в Swift 2.0, чтобы объявить Let или var?


person Jonathan Meguira    schedule 23.11.2015    source источник
comment
Я думаю, что вы не используете этот объект URL нигде в своем коде, поэтому быстро выдает это предупреждение. На самом деле я не вижу этого предупреждения с объектом URL, вместо этого вижу это предупреждение для объекта данных !!! (Со скриншота)   -  person Midhun MP    schedule 23.11.2015
comment
Если вы не используете переменную data, не объявляйте ее.   -  person Sulthan    schedule 23.11.2015
comment
Вы не используете data, потому что вы объявляете его, но затем он повторно объявляется как параметр в обратном вызове, и это то, что вы на самом деле используете.   -  person Wain    schedule 23.11.2015
comment
Вот мой текущий код: { let URL = NSURL(string: www.amazon.com) let data = NSURLSession.sharedSession().dataTaskWithURL(URL!) { (данные, ответ, ошибка) in if (error == nil) { let urlContent = NSString(data: data!, encoding: NSUTF8StringEncoding) print(urlContent) } } } и я все еще получаю ту же ошибку, хотя я заменил var на let   -  person Jonathan Meguira    schedule 23.11.2015


Ответы (4)


initialization of immutable value URL was never used

Означает, что вы нигде не использовали переменную, поэтому выдает предупреждение. Но, глядя на скриншот, вы объявили URL как var и использовали его в data, который является другой переменной.

Так что теперь должно быть два предупреждения. URL объявлен как var, но никогда не изменялся, а переменная data никогда не использовалась.

Чтобы удовлетворить, используйте let URL ..., так как вы не мутируете его. и покончить с data, так как это асинхронный блок/замыкание, и вы можете получить доступ к data из блока завершения.

Примечание:

Вы должны использовать let, когда вы не будете изменять его позже, и вы должны использовать var, когда хотите изменить объект. Рассмотрим массив:

let immutableArray:[String] = ["foo", "bar"]
var mutableArray:[String] = ["hello"]

mutableArray.append("World") // Is valid since its a var
immutableArray.append("abc") // Not valid, infact auto complete does not even show append methods
person GoodSp33d    schedule 23.11.2015

Всякий раз, когда вы объявляете let и не используете этот постоянный компилятор, будет отображаться предупреждение. Здесь не о чем беспокоиться. Если вы не используете константу let, замените ее на _. Это для оптимизации. Если вы не используете, удалите этот файл let. Или, чтобы отключить предупреждение, используйте простой print(YOUR Constant) Для вашего пользователя

let url = URL = NSURL(string:"www.google.com")

Чем

let data = NSURLSession.sharedSession().downloadTaskWithURL(URL!) {
{ (data, response, error) in {
  if(error != nil) {
  print(data) // This data is different from let data constant
}
print(data) // This will silence warning. Also make sure it is not nil
person Saqib Omer    schedule 23.11.2015

это может работать нормально.

let URL = NSURL(string:"www.google.com")
NSURLSession.sharedSession().downloadTaskWithURL(URL!) { (url: NSURL?, response: NSURLResponse?, error: NSError?) -> Void in
    if error == nil && url != nil {
        let data = NSData(contentsOfURL: url!)
            print(data)
        }
    }
person Kingiol    schedule 23.11.2015

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

person khoiNN    schedule 23.11.2015