subscript (r: Range<Int>) -> String {
let start = startIndex.advancedBy(r.startIndex)
let end = start.advancedBy(r.endIndex - r.startIndex)
return self[Range(start: start, end: end)]
}
Run Code Online (Sandbox Code Playgroud)
苦苦挣扎将我的String扩展中的上面的下标转换为swift 3.下面是我在Xcode上按下转换按钮后发生的事情.
subscript (r: Range<Int>) -> String {
let start = characters.index(startIndex, offsetBy: r.lowerBound)
let end = <#T##String.CharacterView corresponding to `start`##String.CharacterView#>.index(start, offsetBy: r.upperBound - r.lowerBound)
return self[(start ..< end)]
}
Run Code Online (Sandbox Code Playgroud)
错误的屏幕截图
我知道我们可以使用下标来剪切Swift 4中的一部分字符串.
let s = "aString"
let subS = s[..<s.endIndex]
Run Code Online (Sandbox Code Playgroud)
但问题是,如何切割s到像SubString一样aStr.
我的意思是,我想做的就像是s[..<(s.endIndex-3)].
但这不对.
那么,如何在Swift 4中做到这一点.
Swift 4改变了字符串的工作方式.但是,似乎更复杂,更不易阅读.任何人都可以简化这个例子(简单地将String的第三个字母作为字符串)?(除了拆分线外.)
let myString="abc"
let thirdLetter = String(myString[myString.index(myString.startIndex, offsetBy: 2)])
Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个通用的 Mutable Ordered Set 类型,它需要符合许多协议才能与 Array 和 Set 在 Swift 中的行为方式相同。首先要做到的是,泛型类型元素的需求,以符合Hashable和通用结构需要顺应RandomAccessCollection,SetAlgebra,ExpressibleByArrayLiteral,AdditiveArithmetic,RangeReplaceableCollection和MutableCollection。我想也允许其访问标SubSequence添加支持PartialRangeThrough,PartialRangeUpTo,PartialRangeFrom和UnboundedRange也。
这是我的通用OrderedSet结构声明:
public struct OrderedSet<Element: Hashable> {
public init() { }
private var elements: [Element] = []
private var set: Set<Element> = []
}
Run Code Online (Sandbox Code Playgroud)
尽管这是一个自我回答的问题,但我真的很感激并鼓励提供新的答案、有关此实现的一些反馈和/或有关如何修复/改进它的建议:
编辑/更新:
该sorted方法按预期工作,但sort它的变异甚至不会改变元素顺序。
可变集合
声明变异
功能排序()
当 Self 符合 RandomAccessCollection 并且 Element 符合 Comparable 时可用。
var …Run Code Online (Sandbox Code Playgroud) 我在Apple的开发人员站点上找不到文档。在过去的几个小时里,我一直在寻找一个无法解释的答案。我正在尝试学习Swift,并且正在尝试访问字符串中的第n个字符。在C ++中,我知道您可以使用str [int value]即做到这一点。
string str = "This is a test string";
cout << str[2] << endl;
如果我算对的话,应该打印出“ i”。我试图在Swift中做/找到一种方法来做,但是还没有找到简单的方法来做。有人能提供一些意见吗?
我对 Swift 4 字符串操作的最佳实践有点困惑。
您如何处理以下情况:
let str = "test"
let start = str.index(str.startIndex, offsetBy: 7)
Thread 1: Fatal error: cannot increment beyond endIndex
Run Code Online (Sandbox Code Playgroud)
想象一下,您不知道上面变量“str”的长度。由于“start”不是可选值,那么防止崩溃的最佳实践是什么?
我正在尝试从 documentPicker 获取文件类型。我允许我的用户上传 PDF/WORD(doc/docx) 文档类型,对我来说知道是哪一种文档类型至关重要,这样我就可以重命名文件并上传到我的 AWS S3。
感谢任何帮助,我找不到直接从 UIDocumentPickerViewController 获取它的方法。
因此,我试图找到整个 URL 的长度,然后减去 2/3 的长度来找到第一个字母“d”或“p”,然后我可以相应地设置名称。但是我收到此错误,无法使用类型为“(URL)”的参数列表调用类型“String”的初始值设定项。
public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
let myURL = url as URL
print("import result : \(myURL)")
let s3BucketName = "adnexio-directory/cv_upload"
let url = myURL
var remoteName = ""
//if (url[url.length as Int - 3] == "d")
//if (str[str.count - 3] == "d")
if (url.length - 3 == "d")
{
remoteName = "IOSTEST.docx"
}
else if (url.length - 2 == "d")
{
remoteName …Run Code Online (Sandbox Code Playgroud)