2016-07-05 4 views
4

элемента Следующий код выдает следующее сообщение об ошибке: «Значение типа строки не имеет componentsSeparatedByCharactersInSet элемента»Ошибка: значение типа строки не имеет componentsSeparatedByCharactersInSet

Этот код из другого проекта, который работал до этого в быстрых версиях 1 или 2 но больше не работает.

import Foundation 

extension String { 

    func split() -> [String] { 
     return self.componentsSeparatedByCharactersInSet(
      CharacterSet.whitespaceAndNewlineCharacterSet()) 
      .filter({$0 != ""}); 
    } 
} 

extension Array { 

    func unique<T: Equatable>() -> [T] { 
     var uniqueValues = [T](); 

     for value in self { 
      if !contains(uniqueValues, value as T) { 
       uniqueValues.append(value as! T); 
      } 
     } 
     return uniqueValues; 
    } 

    func first<T>(test:(T) -> Bool) -> T? { 
     for value in self { 
      if test(value as! T) { 
       return value as? T; 
      } 
     } 
     return nil; 
    } 
} 
+0

Является ли это Swift 2 или 3 Swift? Вы отметили оба ... – Alexander

+0

@AMomchilov Я бы хотел использовать swift 3, но этот код исходит из swift 2 Я верю, что я удалил синтаксический сахар NS. –

+1

Вы можете использовать нотацию закрывающего закрытия для '.filter' btw – Alexander

ответ

10

Вы ищете components(separatedBy:):

func split() -> [String] { 
    return self.components(separatedBy: .whitespacesAndNewlines).filter{!$0.isEmpty} 
} 
+3

Swift 3 нет 'whitespaceAndNewlineCharacterSet()'. Правильнее было бы «вернуть компоненты (разделенныеBy: .whitespacesAndNewlines) .filter {! $ 0.isEmpty}' –

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