Swift: "Cannot invoke subscript" : 通过在索引处传递 class 数组来设置对象成员
Swift: "Cannot invoke subscript" : setting an objects members up by handing it a class's array at an index
我在 Swift 中编程时遇到问题。在我创建 SchedulePatientsTest class 的实例后,我开始收到此错误:Cannot invoke 'subscript' with an argument list of type '(name:$T4, email: $T9, ssn: $T14, 出生日期: $T19)'
由于我是 Swift 的新手,所以我在调试它时遇到了麻烦,谷歌搜索也没有多大帮助。我知道它在抱怨数组的下标,但我不明白为什么。感谢您的帮助!
import UIKit
struct SchedulePatientsTest {
let patientNames = [ "John Lennon", "Paul McCartney", "George Harrison", "Ringo Starr" ]
let patientEmails = [ "jlennon@beatles.com", "pmccartney@another.edu","george@something.com","drummer@beatles.org"]
let patientSSN = [ "123-45-6789","333-22-1123","567-39-9282","888-88-8888"]
let patientBirthDates = [ "05/01/1951", "06/23/1964","09/05/1955", "02/28/2001"]
let doctorNames = [ "John Smith", "Jane Doe", "Mary Jones", "Beth Garcia"]
let doctorEmails = [ "John Smith", "Jane Doe", "Mary Jones", "Beth Garcia" ]
let doctorSSN = [ "445-25-3382", "582-10-9983", "180-38-0038", "343 - 34-9875" ]
let doctorBirthDates = [ "06/03/1941", "10/10/1950", "12/25/1965", "07/19/1964" ]
let specialty = [ medicalSpecialties.GENERAL_MEDICINE, medicalSpecialties.PEDIATRICS, medicalSpecialties.GENERAL_MEDICINE, medicalSpecialties.ONCOLOGY]
init()
{
}
}
class Patient {
var name : String = ""
var email : String = ""
var ssn : String = ""
var dob : NSDate = NSDate()
init(name: String, email : String, ssn : String, dob : NSDate) {
self.name = name
self.email = email
self.ssn = ssn
self.dob = dob
}
func getName()->(String)
{
return(name)
}
}
class Doctor : Patient {
var specialty : medicalSpecialties
init(specialty: medicalSpecialties,name: String, email : String, ssn : String, dob : NSDate) {
self.specialty = specialty
super.init(name: name, email: email, ssn: ssn, dob: dob)
}
}
enum medicalSpecialties {
case GENERAL_MEDICINE
case PEDIATRICS
case ONCOLOGY
}
let CMYK = SchedulePatientsTest()
let P1 = Patient(name: CMYK.patientNames[0], email: CMYK.patientEmails[0], ssn: CMYK.patientSSN[0], dob: CMYK.patientBirthDates[0])
这是一个有点模糊的错误消息,但错误的发生是因为您将字符串而不是 NSDate 传递给 Patient 初始值设定项。
let patientBirthDates = [ "05/01/1951", ...]
创建一个字符串对象数组,而不是日期对象。 Patient 初始值设定项需要 NSDate
作为其 dob
参数。
字符串与 NSDate
代码 ["05/01/1951", "06/23/1964"]
不会创建 NSDate 对象数组,即使变量定义为 patientBirtDates: [NSDate]
。这是什么,是一个字符串文字数组。这些字符串文字是 'converted' 到 String
个对象。如果要创建一个NSDate对象数组,需要实际实例化NSDate对象:
let patientBirthDates = [
NSDate(timeIntervalSince1970: 100),
NSDate(timeIntervalSince1970: 200),
NSDate(timeIntervalSince1970: 300)
]
您使用哪种创建 NSDates 的方法由您决定,请查看 available ininitializers。
我在 Swift 中编程时遇到问题。在我创建 SchedulePatientsTest class 的实例后,我开始收到此错误:Cannot invoke 'subscript' with an argument list of type '(name:$T4, email: $T9, ssn: $T14, 出生日期: $T19)'
由于我是 Swift 的新手,所以我在调试它时遇到了麻烦,谷歌搜索也没有多大帮助。我知道它在抱怨数组的下标,但我不明白为什么。感谢您的帮助!
import UIKit
struct SchedulePatientsTest {
let patientNames = [ "John Lennon", "Paul McCartney", "George Harrison", "Ringo Starr" ]
let patientEmails = [ "jlennon@beatles.com", "pmccartney@another.edu","george@something.com","drummer@beatles.org"]
let patientSSN = [ "123-45-6789","333-22-1123","567-39-9282","888-88-8888"]
let patientBirthDates = [ "05/01/1951", "06/23/1964","09/05/1955", "02/28/2001"]
let doctorNames = [ "John Smith", "Jane Doe", "Mary Jones", "Beth Garcia"]
let doctorEmails = [ "John Smith", "Jane Doe", "Mary Jones", "Beth Garcia" ]
let doctorSSN = [ "445-25-3382", "582-10-9983", "180-38-0038", "343 - 34-9875" ]
let doctorBirthDates = [ "06/03/1941", "10/10/1950", "12/25/1965", "07/19/1964" ]
let specialty = [ medicalSpecialties.GENERAL_MEDICINE, medicalSpecialties.PEDIATRICS, medicalSpecialties.GENERAL_MEDICINE, medicalSpecialties.ONCOLOGY]
init()
{
}
}
class Patient {
var name : String = ""
var email : String = ""
var ssn : String = ""
var dob : NSDate = NSDate()
init(name: String, email : String, ssn : String, dob : NSDate) {
self.name = name
self.email = email
self.ssn = ssn
self.dob = dob
}
func getName()->(String)
{
return(name)
}
}
class Doctor : Patient {
var specialty : medicalSpecialties
init(specialty: medicalSpecialties,name: String, email : String, ssn : String, dob : NSDate) {
self.specialty = specialty
super.init(name: name, email: email, ssn: ssn, dob: dob)
}
}
enum medicalSpecialties {
case GENERAL_MEDICINE
case PEDIATRICS
case ONCOLOGY
}
let CMYK = SchedulePatientsTest()
let P1 = Patient(name: CMYK.patientNames[0], email: CMYK.patientEmails[0], ssn: CMYK.patientSSN[0], dob: CMYK.patientBirthDates[0])
这是一个有点模糊的错误消息,但错误的发生是因为您将字符串而不是 NSDate 传递给 Patient 初始值设定项。
let patientBirthDates = [ "05/01/1951", ...]
创建一个字符串对象数组,而不是日期对象。 Patient 初始值设定项需要 NSDate
作为其 dob
参数。
字符串与 NSDate
代码 ["05/01/1951", "06/23/1964"]
不会创建 NSDate 对象数组,即使变量定义为 patientBirtDates: [NSDate]
。这是什么,是一个字符串文字数组。这些字符串文字是 'converted' 到 String
个对象。如果要创建一个NSDate对象数组,需要实际实例化NSDate对象:
let patientBirthDates = [
NSDate(timeIntervalSince1970: 100),
NSDate(timeIntervalSince1970: 200),
NSDate(timeIntervalSince1970: 300)
]
您使用哪种创建 NSDates 的方法由您决定,请查看 available ininitializers。