Swift 如何设置字符串变量并使其始终为小写?

Swift 如何设置字符串变量并使其始终为小写?,swift,didset,property-observer,Swift,Didset,Property Observer,我想设置一个字符串变量,并希望它始终保持小写 这是我的代码: var alwaysLowercaseString : String? { didSet{ alwaysLowercaseString = alwaysLowerCaseString!.lowercaseString } } 但当我使用它时,它进入了一个无限循环。如何解决这个问题?我认为正确,这是正确的方法。LeoDabus的回答值得称赞: var alwaysLowercaseString : S

我想设置一个字符串变量,并希望它始终保持小写

这是我的代码:

var alwaysLowercaseString : String? {

    didSet{
        alwaysLowercaseString = alwaysLowerCaseString!.lowercaseString
    }
}

但当我使用它时,它进入了一个无限循环。如何解决这个问题?

我认为正确,这是正确的方法。LeoDabus的回答值得称赞:

var alwaysLowercaseString : String? {

    didSet{

    alwaysLowercaseString = alwaysLowercaseString?.lowercaseString
      print(alwaysLowercaseString)
    }
}

这将进行检查,因此如果小写字符串已经是小写的,则不会再次更改
alwaysLowercaseString
的值,这样您就不会无限地调用
didSet
。当
alwaysLowercaseString
设置为小写后,它将中断。

因此,您可以理解为什么在无限循环中,
alwaysLowercaseString
的值发生更改时,始终会调用
didSet
。检查它是否已经是小写将阻止它被重置。但是,您缺少对
nil
的检查,它在
nil
时崩溃。只是一个小细节,但可以防止将来出现另一个可能的问题;)您的代码应该可以正常工作。你只是有一些打字错误。只是使用条件?而不是强制执行
var alwaysLowercaseString:String?{didSet{alwaysLowercaseString=alwaysLowercaseString?.lowercaseString}
是的,它成功了!您之前回答的代码(代码在
中将设置为
)也起作用,您的解释让我明白了。但我不明白为什么这段代码也能起作用。我的印象是willSet会做这件事,然而,@LeoDabus(一位高代表性用户)指出我错了,而你错的只是一个简单的打字错误。我检验了他说的话,他是对的。看来我们都有一些关于财产观察员的阅读材料要做。:)
var alwaysLowercaseString : String? {

    didSet{
        if alwaysLowercaseString != alwaysLowerCaseString!.lowercaseString {
            alwaysLowercaseString = alwaysLowerCaseString!.lowercaseString
        }
    }
}