为什么我的Swift程序打印结果会出现多余的()字符?
问题成因
你定义的convert和switchScale两个方法都没有声明返回值,Swift中无返回值的方法默认返回Void类型,也就是空元组()。你在print语句中直接传入这两个方法的调用结果,print就会把方法返回的空元组()也打印出来,这就是多余字符的来源。
另外代码还存在两个隐性问题:初始化方法中scale.lowercased()调用后没有接收返回值,小写转换逻辑无效;switchScale方法直接使用全局temp变量,逻辑耦合度高。
修复步骤
1. 移除外层多余的print调用
两个方法内部已经自带了打印逻辑,不需要再嵌套一层print调用,原写法:
print(instance.convert(for: temp), instance.switchScale())
改为直接调用即可:
instance.convert(for: temp) instance.switchScale(for: temp)
2. 优化switchScale方法
移除方法内部嵌套的print调用,同时增加温度参数,避免依赖全局变量:
mutating func switchScale(for temp: Double){ switch self { case .Celsius: self = .Farenheit convert(for: temp) case .Farenheit: self = .Celsius convert(for: temp) } }
3. 修复初始化方法的小写判断逻辑
接收小写转换后的结果再做判断,避免大小写输入导致判断失效:
init(in scale: String){ self = .Celsius let lowercasedScale = scale.lowercased() if lowercasedScale.contains("c"){ self = .Celsius } else if lowercasedScale.contains("f"){ self = .Farenheit } }
完整可运行修复后代码
import Foundation enum tempConverter{ case Celsius case Farenheit init(in scale: String){ self = .Celsius let lowercasedScale = scale.lowercased() if lowercasedScale.contains("c"){ self = .Celsius } else if lowercasedScale.contains("f"){ self = .Farenheit } } func convert(for temp: Double){ switch self { case .Celsius: print(temp, "c ->", (temp * 9)/5 + 32, "f") case .Farenheit: print(temp, "f ->", (temp - 32) * 5 / 9, "c") } } mutating func switchScale(for temp: Double){ switch self { case .Celsius: self = .Farenheit convert(for: temp) case .Farenheit: self = .Celsius convert(for: temp) } } } var instance = tempConverter(in: "f") var temp = 32.0 instance.convert(for: temp) instance.switchScale(for: temp) temp = 212.0 instance.convert(for: temp) instance.switchScale(for: temp)
内容的提问来源于stack exchange,提问作者AR_97
相关产品推荐
相关产品推荐

