在Swift中设置特定变量
我正在使用Pitre的书《初学者的Swift代码》学习Swift代码。我对书中没有充分描述的一个陈述有一个问题 在制定如何设置简单应用程序时,作者首先创建一个名为SimpleInterest.swift的新目标文件,该文件包含以下语句:在Swift中设置特定变量,swift,inheritance,Swift,Inheritance,我正在使用Pitre的书《初学者的Swift代码》学习Swift代码。我对书中没有充分描述的一个陈述有一个问题 在制定如何设置简单应用程序时,作者首先创建一个名为SimpleInterest.swift的新目标文件,该文件包含以下语句: import Foundation class SimpleInterest{ func calculate(loanAmount:Double, var interestRate:Double,years:Int) -> Double{
import Foundation
class SimpleInterest{
func calculate(loanAmount:Double, var interestRate:Double,years:Int) -> Double{
interestRate = interestRate/100.00
var interest = Double(years) * interestRate * loanAmount
return loanAmount + interest
}
}
然后,在主文件AppDelegate.swift中设置以下代码:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
@IBOutlet weak var loanAmountField:NSTextField!
@IBOutlet weak var interestRateField:NSTextField!
@IBOutlet weak var yearsField:NSTextField!
@IBOutlet weak var resultField:NSTextField!
var simpleInterestCalculator:SimpleInterest = SimpleInterest
@IBAction func buttonClicked(sender:NSButton) {
var result:Double
result = simpleInterestCalculator.calculate(loanAmountField.doubleValue,
interestRate:interestRateField.doubleValue,
years:yearsField.integerValue)
self.resultField.stringValue = result.description
}
}
我的问题在于这句话:
var simpleInterestCalculator:SimpleInterest = SimpleInterest()
我不知道为什么我们不能简单地说:
var simpleInterestCalculator = SimpleInterest()
因为SimpleInterest已经是包的一部分。我错过了什么
这是一种由以下代码表示的继承快捷方式:
AnotherSimpleInterestClass : SimpleInterest{
var simpleInterestCalculator = AnotherSimpleInterestClass()
}
没有;
:
运算符根据上下文具有不同的含义
您在最后提到的继承表示是一种类型;:
表示当前类扩展的类
然而,在var-simpleInterestCalculator:SimpleInterest=SimpleInterest
的情况下,它仅表示类型
也就是说,simpleInterestCalculator
属于您在SimpleInterest
类中定义的类型SimpleInterest
;然后将构造SimpleInterest
对象的结果分配给该变量
其他例子:
var testStr: String = "Test" // Type String
var testInt: Int = 5 // Type Int
var controller: UIViewController = UIViewController() // Type UIViewController
变量名后的冒号和类型显式定义对象实例的类类型。Swift能够从指定的值推断出这一点,因此从技术上讲,您是正确的,这是不必要的,但不是无效的
var myString:String = "my string"
完全一样
var myString = "my string"
你正在学习的这本书的作者只是喜欢更冗长的语法。编译器将推断出正确的类型,并消除对冗余变量类型声明的需要:尝试不使用显式类型,您会发现它没有任何区别 如果可能存在歧义,则在Swift中显式键入可能很有用。在这种情况下,没有这样的意图,因此可能是纯粹的教学
var thing: Thing = Thing()
//is strictly equivalent to
var thing = Thing()
// but typing explicitly would make sense here:
var derivedThing: Thing = DerivedThing()
//if DerivedThing inherits from Thing, of course!
感谢所有回答这个问题的人。以下是我所能推断的:
var simpleInterestCalculator:SimpleInterest = SimpleInterest
var simpleInterestCalculator = SimpleInterest
指定类型不仅仅是冗长;如果它没用,苹果就不会把它包括在内。通常,指定类型有助于防止出现令人讨厌的错误。我想你误读了我的答案。不要试图暗示显式类型是无用的,但在链接相同类型的var声明、类型和实例化的特定情况下,这是多余的,可能是教学上的。