Невозможно запустить Spark 2.6.3 в Ubuntu 12.04

Внимание: Пожалуйста, смотрите Ответ Льва Дабуса для правильной реализации Swift 4.

Swift 4

Тип Substring был введен в Swift 4, чтобы сделать подстроки более быстрыми и эффективными за счет совместного использования памяти с исходной строкой, так что именно это должны возвращать функции нижнего индекса.

Попробуйте здесь

extension String {
  subscript (i: Int) -> Character {
    return self[index(startIndex, offsetBy: i)]
  }
  subscript (bounds: CountableRange) -> Substring {
    let start = index(startIndex, offsetBy: bounds.lowerBound)
    let end = index(startIndex, offsetBy: bounds.upperBound)
    return self[start ..< end]
  }
  subscript (bounds: CountableClosedRange) -> Substring {
    let start = index(startIndex, offsetBy: bounds.lowerBound)
    let end = index(startIndex, offsetBy: bounds.upperBound)
    return self[start ... end]
  }
  subscript (bounds: CountablePartialRangeFrom) -> Substring {
    let start = index(startIndex, offsetBy: bounds.lowerBound)
    let end = index(endIndex, offsetBy: -1)
    return self[start ... end]
  }
  subscript (bounds: PartialRangeThrough) -> Substring {
    let end = index(startIndex, offsetBy: bounds.upperBound)
    return self[startIndex ... end]
  }
  subscript (bounds: PartialRangeUpTo) -> Substring {
    let end = index(startIndex, offsetBy: bounds.upperBound)
    return self[startIndex ..< end]
  }
}
extension Substring {
  subscript (i: Int) -> Character {
    return self[index(startIndex, offsetBy: i)]
  }
  subscript (bounds: CountableRange) -> Substring {
    let start = index(startIndex, offsetBy: bounds.lowerBound)
    let end = index(startIndex, offsetBy: bounds.upperBound)
    return self[start ..< end]
  }
  subscript (bounds: CountableClosedRange) -> Substring {
    let start = index(startIndex, offsetBy: bounds.lowerBound)
    let end = index(startIndex, offsetBy: bounds.upperBound)
    return self[start ... end]
  }
  subscript (bounds: CountablePartialRangeFrom) -> Substring {
    let start = index(startIndex, offsetBy: bounds.lowerBound)
    let end = index(endIndex, offsetBy: -1)
    return self[start ... end]
  }
  subscript (bounds: PartialRangeThrough) -> Substring {
    let end = index(startIndex, offsetBy: bounds.upperBound)
    return self[startIndex ... end]
  }
  subscript (bounds: PartialRangeUpTo) -> Substring {
    let end = index(startIndex, offsetBy: bounds.upperBound)
    return self[startIndex ..< end]
  }
}

Чтобы преобразовать Substring в String, вы можете просто сделать String(string[0..2]), но вы должны делать это только если вы планирую держать подстроку вокруг. В противном случае более эффективно сохранить его Substring.

1137 Было бы замечательно, если бы кто-нибудь смог найти хороший способ объединить эти два расширения в одно. Я попытался расширить StringProtocol безуспешно, потому что метод index там не существует.

& nbsp;

Swift 3:

extension String {
  subscript (i: Int) -> Character {
    return self[index(startIndex, offsetBy: i)]
  }
  subscript (i: Int) -> String {
    return String(self[i] as Character)
  }
  subscript (r: Range) -> String {
    let start = index(startIndex, offsetBy: r.lowerBound)
    let end = index(startIndex, offsetBy: r.upperBound)
    return self[Range(start ..< end)]
  }
}

& nbsp;

Почему это не встроено?

Apple предоставляет следующее объяснение ( найдено здесь ):

Подписывание строк с целыми числами недоступно.

Понятие «i-й символ в строке» имеет разные интерпретации в разных библиотеках и компонентах системы. Правильная интерпретация должна быть выбрана в соответствии со случаем использования и задействованными API, поэтому String не может быть подписано целым числом.

Swift предоставляет несколько различных способов доступа к символьным данным, хранящимся внутри строк.

  • String.utf8 - это набор кодовых единиц UTF-8 в строке. Используйте этот API при преобразовании строки в UTF-8. Большинство API POSIX обрабатывают строки в единицах кода UTF-8.

  • String.utf16 - это набор кодовых единиц UTF-16 в виде строки. Большинство сенсорных API-интерфейсов Какао и Какао обрабатывают строки в единицах кода UTF-16. Например, экземпляры NSRange, используемые с NSAttributedString и NSRegularExpression, хранят смещения и длины подстрок в единицах кода UTF-16.

  • String.unicodeScalars - это коллекция скаляров Unicode. Используйте этот API, когда вы выполняете низкоуровневую манипуляцию с символьными данными.

  • String.characters представляет собой набор расширенных кластеров графем, которые являются приближением воспринимаемых пользователем символов.

Обратите внимание, что при обработке строк, содержащих читаемый человеком текст, следует избегать посимвольной обработки в максимально возможной степени. Вместо этого используйте высокоуровневые чувствительные к локали алгоритмы Unicode, например, String.localizedStandardCompare(), String.localizedLowercaseString, String.localizedStandardRangeOfString() и т. Д.

1
задан 06.05.2020, 17:39

1 ответ

Проблема с этой версией заключается в том, что программа пытается запустить файл /bin/unpack200, который не существует. Однако файл /usr/bin/unpack200 существует. Это связано с тем, что этот файл находится в разных местах в зависимости от архитектуры используемой машины - если он 32-битный, он находится в одном месте, если он 64-битный, он находится в другом.

У меня возникла эта проблема, потому что файл был создан для работы на 32-битной архитектуре, но я использую 64-битную машину.

Поэтому, чтобы решить эту проблему, необходимо установить 32-битные библиотеки. Для этого просто наберите: sudo apt-get install ia32-libs.


Источник:

0
ответ дан 06.05.2020, 17:40

Теги

Похожие вопросы