Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过下标将指定给Swift字符串_Swift_String_Subscript - Fatal编程技术网

无法通过下标将指定给Swift字符串

无法通过下标将指定给Swift字符串,swift,string,subscript,Swift,String,Subscript,我有一个包含名称、图像、虚线形式的名称和名称长度的类。例如,我可以有“dog”,一个狗的图像,“--”,名字长度为3 我只想为每个对象设置名称和pic,并自动设置dashName和nameLength class Answer { var name = "name" var image: UIImage? var dashName = "name" var nameLength = 0 init(){ var a = 0

我有一个包含名称、图像、虚线形式的名称和名称长度的类。例如,我可以有“dog”,一个狗的图像,“--”,名字长度为3

我只想为每个对象设置名称和pic,并自动设置
dashName
nameLength

class Answer {
    var name = "name"
    var image: UIImage?
    var dashName = "name"
    var nameLength = 0

    init(){

        var a = 0
        nameLength = name.characters.count

        while a <= nameLength {
            if (name[a] == " ") {dashName[a] = " "}
            else {dashName[a] = "-"}
            a += 1
        }
    }
}
课堂答案{
var name=“name”
var图像:UIImage?
var dashName=“name”
变量nameLength=0
init(){
变量a=0
nameLength=name.characters.count
而a编辑:反向

class Answer {
    var name = "name"
    var image: UIImage?
    var dashName = "name"
    var nameLength = 0

    init(){
        dashName = String(name.map {$0 == " " ? " " : "-"})
    }
}

String
的下标运算符是get only,这意味着您只能使用它读取字符串,并且必须使用其他内容来写入可变字符串

您可以解决此问题,并使用
name

Swift 4

class Answer {
    var name = "name"
    var image: UIImage?
    var dashName = "name"
    var nameLength = 0

    init()
    {
        nameLength = name.count
        dashName = name.map { $0 == " " ? " " : "-" }.joined()
    }
}
Swift 3

class Answer {
    var name = "name"
    var image: UIImage?
    var dashName = "name"
    var nameLength = 0

    init()
    {
        nameLength = name.characters.count
        dashName = name.characters.map { $0 == " " ? String(" ") : String("-") }.joined()
    }
}
一如既往,, Swift的
String
类是其他语言所称的
StringBuilder
类,出于性能原因,Swift不提供按索引设置字符;如果您不关心性能,简单的解决方案可以是:

public static func replace(u-string:string,在索引处:Int,带值:string){
让start=string.index(string.startIndex,offsetBy:index)
让end=string.index(start,offsetBy:1)
string.replaceSubrange(开始..字符{
返回self[self.index(self.startIndex,offsetBy:index)];
}
公共变异func setCharAt(u索引:Int,u新:字符){
self.setCharAt(索引,字符串(新))
}
public mutating func setCharAt(u-index:Int,u-new:String){
设i=self.index(self.startIndex,offsetBy:index)
self.replaceSubrange(i…i,with:new)
}
}
注意上面需要如何调用
index(…)
方法将整数转换为实际索引!?看起来,Swift实现
字符串
就像一个链表,其中
append(…)
非常快,但即使找到索引(不使用它)也是一个线性时间操作(并根据连接计数变慢)


空格应单独保留,任何其他字符应替换为“
-