Swift 无法将类型“()”的值分配给类型“字符串?”

Posted

技术标签:

【中文标题】Swift 无法将类型“()”的值分配给类型“字符串?”【英文标题】:Swift cannot assign value of type '()' to type 'String?' 【发布时间】:2016-05-13 15:25:48 【问题描述】:

我正在学习 Swift2/ios 应用程序开发。我对编译前 Xcode 抛出的错误感到困惑。这是引发错误的代码:

let dotpos = display.text!.rangeOfString(".")
if dotpos != nil 
    display.text = display.text!.removeRange(dotpos!)

抛出的错误是(在“display.text = display.text!.removeRange(dotpos!)”这一行):

无法将类型“()”的值分配给类型“字符串”?

注意:display 是一个UILabel 对象。

有人能指出我可能犯的错误吗?

【问题讨论】:

removeRange 没有() 表示的返回值 @vadian 因为display.text 的类型是String?(通过option+click 确认),所以不应该将返回值推断为String? 吗? 否,方法标记为mutating,表示接收者原地变异。 请帮忙解决同样的错误 let textString = cell.streetAddLabel.text = NSString(format: "%@\n%@", (restaurant.address != nil ? restaurant.address! : "" ), (restaurant.crossStreet != nil ? restaurant.crossStreet! : "")) 一样! NSString print("tt (textString)") cell.streetAddLabel.text = textString // 此处出错 【参考方案1】:

您需要查看相关文档 (Apple swift String link)

let dotpos = display.text!.rangeOfString(".")
if dotpos != nil 
    display.text!.removeRange(dotpos!)

这段代码可以工作,removeRange 函数没有返回任何东西,文档说

变异函数 removeRange(_ subRange: Range)

表示当您调用文本标签上的方法时,文本会发生变化。

文本直接更改,更改时无需指定新值。

【讨论】:

现在所见即所得!谢谢! 酷,快乐的编码:)

以上是关于Swift 无法将类型“()”的值分配给类型“字符串?”的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法将“[String]”类型的值分配给 swift 中的“String”类型

Swift 4:无法将类型“(Void)-> Void”的值分配给类型“(()-> Void)?”

在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。

无法将类型“类”的值分配给类型“[类]”

xcode 无法将类型的值分配给 NSSet

无法将 String 类型的值分配给 AnyObject 类型?斯威夫特 3.0