var sectionTitles: [String] = ["Apple", "Brownie", "Cupcakes"]
var sectionIndexTitles: [String]{
get{
return sectionTitles.map { $0.substringToIndex(2) }
}
}
我在sectionIndexTitles
上遇到'NSString' is not a subtype of 'String'
的编译错误。我该如何解决?
答案 0 :(得分:3)
您需要将String强制转换为NSString。请参阅以下代码:
var sectionIndexTitles: [String]{
get{
return sectionTitles.map {
($0 as NSString).substringToIndex(2)
}
}
}
<强>更新强> 因为你没有使用setter,你可以通过省略这样的getter声明来简化这段代码:
var sectionIndexTitles: [String] {
return sectionTitles.map { ($0 as NSString).substringToIndex(2) }
}
答案 1 :(得分:1)
substringToIndex()
和NSString
都存在String
方法,但是
这两种方法有不同的参数类型。
NSString
方法
需要Int
,因此您可以将$0
投射到NSString
,如图所示
Roman Salabay的回答。
String
方法采用String.Index
参数,看起来如此
有点复杂:
var sectionIndexTitles: [String] {
get {
return sectionTitles.map {
$0.substringToIndex(advance($0.startIndex, 2, $0.endIndex))
}
}
}
但是,有一个通用的
func prefix<S : Sliceable>(s: S, maxLength: Int) -> S.SubSlice
可以在这里使用的方法:
var sectionIndexTitles: [String] {
get {
return sectionTitles.map {
prefix($0, 2)
}
}
}
答案 2 :(得分:0)
此处未经过NSString
转化:
let sectionTitles = ["hello", "world"]
let xs = sectionTitles.map { $0.substringToIndex(advance($0.startIndex, 2))}
xs // ["he", "wo"]
问题是String
有自己的Index
类型。这主要是由于它处理的各种UTF
表示。 AFAIK NSString
主要使用UTF-8
内部表示。