Swift 3: другое решение (проверено на игровой площадке)
extension String {
func substr(_ start:Int, length:Int=0) -> String? {
guard start > -1 else {
return nil
}
let count = self.characters.count - 1
guard start <= count else {
return nil
}
let startOffset = max(0, start)
let endOffset = length > 0 ? min(count, startOffset + length - 1) : count
return self[self.index(self.startIndex, offsetBy: startOffset)...self.index(self.startIndex, offsetBy: endOffset)]
}
}
Использование:
let txt = "12345"
txt.substr(-1) //nil
txt.substr(0) //"12345"
txt.substr(0, length: 0) //"12345"
txt.substr(1) //"2345"
txt.substr(2) //"345"
txt.substr(3) //"45"
txt.substr(4) //"5"
txt.substr(6) //nil
txt.substr(0, length: 1) //"1"
txt.substr(1, length: 1) //"2"
txt.substr(2, length: 1) //"3"
txt.substr(3, length: 1) //"4"
txt.substr(3, length: 2) //"45"
txt.substr(3, length: 3) //"45"
txt.substr(4, length: 1) //"5"
txt.substr(4, length: 2) //"5"
txt.substr(5, length: 1) //nil
txt.substr(5, length: -1) //nil
txt.substr(-1, length: -1) //nil
Я всегда думал, что поставщик пространства имен - это свойство ReSharper.
Какую версию Visual Studio вы используете и какой он?
Многие из этих типов проблем возникают, когда один разработчик использует Team Suite, а другой - стандартную версию.
Ниндзя
К сожалению, похоже, что параметр «поставщик пространства имен» хранится в файле .suo для решения. Попробуйте открыть SUO на чем-нибудь вроде notepad ++, в котором есть мониторинг файлов, и убедитесь сами.
Измените его, сохраните файл, наблюдатель файлов уведомит об обновлении. Возможно, это связано с тем, что параметр поставщика пространства имен ничего не делает с скомпилированным кодом, это просто информация, которую VS использует при создании новых файлов классов (теория).