swift - 如何修复此错误无法使用“(学生)”类型的参数列表调用“字符串”类型的初始化程序
问题描述
我正在尝试解决hackerrank中的一个问题,该问题说:
编写一个程序来存储 5 个学生的详细信息。- 卷号、姓名、3 个科目的分数
您可以提供以下详细信息:
var s1 = Student(rollNo:1, name:"Alan",mark1:1.45,mark2:2.50,mark3:3.43)
var s2 = Student(rollNo:1, name:"Ben",mark1:1.448,mark2:2.50,标记3:3.32)...您需要获取学生 s1 的卷号。
我创建了一个带有 rollNo、name 和 mark1、mark2、mark3 的结构,然后我从 STDIN 读取。但是当我尝试编写结果时,它会抛出这个错误。有人可以解释我做错了什么吗?
struct Student {
var rollNo: Int
var name: String
var mark1: Double
var mark2: Double
var mark3: Double
}
let fileName = ProcessInfo.processInfo.environment["OUTPUT_PATH"]!
FileManager.default.createFile(atPath: fileName, contents: nil, attributes: nil)
let fileHandle = FileHandle(forWritingAtPath: fileName)!
guard let roll = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") }
guard let n = readLine() else { fatalError("Bad input") }
guard let m1 = Double((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") }
guard let m2 = Double((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") }
guard let m3 = Double((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!) else { fatalError("Bad input") }
let result = Student(rollNo: roll, name: n, mark1: m1, mark2: m2, mark3: m3)
fileHandle.write(String(result).data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)
解决方案
You are seeing this error because you are trying to convert an object to a string.
String() doesn't support that in swift but you can implement the CustomStringConvertable protocol and get a similar result
Change your model to look something like this:
struct Student: CustomStringConvertible {
var rollNo: Int
var name: String
var mark1: Double
var mark2: Double
var mark3: Double
///Change this to how you want your output to be formatted.
var description: String { return "name: \(name) rollNumber: \(rollNo) mark1: \(mark1) mark2: \(mark2) mark3: \(mark3)"}
}
Now to write this student object to a file you can do this:
fileHandle.write(result.description.data(using: .utf8)!)
推荐阅读
- c# - Xamarin.Forms 手势识别器 - 事件“View.GenericMotion”只能出现在 += 或 -= 的左侧
- php - 将数组多维插入数据库
- javascript - 将keepAlive设置为true时Vue keep-alive标签不起作用
- java - Java EE:与返回帮助类实例的方法的接口。馊主意?
- python - Python-sklearn 我正在尝试使用来计算函数的半高全宽
- logging - 如何在 std.experimental.logger 中使用来自 loglevel 的级别?
- python - tf.nn.top_k 损失订单。但我想保持张量的顺序
- multithreading - PyQThread 主线程正在等待虚拟线程完成 moveToThread 方法
- c# - 如果已从 Internet 下载运行项目会导致错误
- c# - MySql Visual Studio 2017(错误:您已经有可用的连接)