2016-03-07 7 views
2

Я хочу, чтобы проверить, если файл имеет слово «текст», однако я столкнулся с этой ошибкой: image of an errorNSRange никогда не может быть нулевым, сравнение не допускается Swift

Есть ли способ решить эту проблему? Благодаря

var data = try NSString(contentsOfFile: documentsDirectoryPath as String, 
     encoding: NSASCIIStringEncoding) 
     print(data) 
if data.rangeOfString("text") != nil { 

      print("this is text") 
     } 
     else{ 
      print("this is an error") 
     } 
+2

Это нормально, чтобы опубликовать снимок экрана, чтобы отобразить сообщение об ошибке, но вы ** также должны опубликовать код в виде текста ** в вопросе. Используйте кнопку [edit] под своим вопросом для редактирования/добавления информации после публикации. – Moritz

+0

проверить для range.index! = NSNotFound вместо – nielsbot

+0

Swift _String_ не имеет _init (contentOfFile: encoding:) _, не так ли? – nielsbot

ответ

2

Вы хотите использовать следующий код, чтобы проверить, если строка найдена:

if data.rangeOfString("text").location != NSNotFound { 

} 

rangeOfString не (пока) возвращают nil, когда значение не найдено. Вместо этого он возвращает NSNotFound.

+0

Благодарим вас за ответ. К сожалению, я получаю эту ошибку: 'Двоичный оператор! = Не может быть применен к операндам типа NSRange и Int' – user3395936

+0

не должен быть' if data.rangeOfString ("text"). Location! = NSNotFound {' – vikingosegundo

+0

Не жалко, пробовал, что и он не работал ни – user3395936

4

rangeOfString объявлен как в стандартной библиотеке Swift (String), так и в Foundation (NSString).

Но они разные:

  • В NSString версию возвращает всегда не опциональная NSRange структуры, location является NSNotFound, если индекс не может быть найден.

    let data : NSString = "sourcetext"   
    if data.rangeOfString("text").location != NSNotFound {...} 
    
  • String версия возвращает дополнительный Range<Index> который nil, если индекс не может быть найден.

    let data : String = "sourcetext"   
    if data.rangeOfString("text") != nil {...} 
    

В вашем случае вы можете использовать Swift версию, принуждая экземпляр NSString к String.

let data = try NSString(contentsOfFile... ) as String 
    if data.rangeOfString("text") != nil {...} 
+0

Спасибо за это предложение. 'contentsOfFile', о котором вы упомянули, должно быть из NSData, однако мои« данные »- это путь к расположению файла, поэтому я не могу использовать это как аргумент. Я понимаю, что вы говорите правильно? – user3395936

+0

В вашем вопросе 'let data ...' возвращает тип Foundation' NSString'. Мое предложение состоит в том, чтобы принудить тип к Swift 'String', чтобы использовать Swift' rangeOfString() ', который может быть' nil' и возвращает необязательный 'Range ' – vadian

+0

Отлично, большое вам спасибо – user3395936

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