Ios 类中的所有值';无';迅速地
我最近在swift中遇到了一个关于类的奇怪问题 基本上,我正在编写一个小程序,跟踪一些基本信息,并对一些行星进行一些计算,主要是为了实践 为此,我首先设置了一个类来存储一些基本属性。接下来,我添加了几个行星,最后给每个行星指定了一些特定的值。然而,尽管给出了值,每个行星的属性仍然显示为“nil”。下面是一些代码的示例:Ios 类中的所有值';无';迅速地,ios,xcode,swift,macos,class,Ios,Xcode,Swift,Macos,Class,我最近在swift中遇到了一个关于类的奇怪问题 基本上,我正在编写一个小程序,跟踪一些基本信息,并对一些行星进行一些计算,主要是为了实践 为此,我首先设置了一个类来存储一些基本属性。接下来,我添加了几个行星,最后给每个行星指定了一些特定的值。然而,尽管给出了值,每个行星的属性仍然显示为“nil”。下面是一些代码的示例: class Body { var distanceToSun:Float80 = 0.0 var mass:Float80 = 0.0 var radiu
class Body {
var distanceToSun:Float80 = 0.0
var mass:Float80 = 0.0
var radius:Float80 = 0.0
}
var Mercury:Body?
var Venus:Body?
var Earth:Body?
Mercury?.distanceToSun = 67790000
Mercury?.mass = 300000000000000000000000
Mercury?.radius = 2440
Venus?.distanceToSun = 108000000
Venus?.mass = (Mercury?.mass)! * 14.7
Venus?.radius = 6052
Earth?.distanceToSun = 147000000
Earth?.mass = (Venus?.mass)! * 1.266
Earth?.radius = 6378
print(Earth?.mass) // prints 'nil'
print(Mercury?.radius) // prints 'nil'
print(Mercury?.distanceToSun) // prints 'nil'
//etc etc
我是不是漏掉了什么明显的东西?任何帮助都将不胜感激。谢谢 这一切都是意料之中的。让我们看一个案例:
var Mercury:Body?
因此,Mercury
为零,因为您从未将其分配给任何对象。然后执行:
Mercury?.distanceToSun = 67790000
这表示“如果Mercury
不为零,则将该值指定给distanceToSun
”,因为Mercury
当然为零,这不起任何作用
我不清楚为什么这些是可选的。只要将它们设置为非可选的,大部分都会按预期工作。更好的是,去掉所有的默认值和选项,只是初始化一些东西
class Body {
let distanceToSun:Float80
let mass:Float80
let radius:Float80
}
let mercury = Body(distanceToSun: 6779000, mass = 300000000000000000000000, radius = 2440)
为什么这些都是变量?水星不太可能在你的程序运行期间显著改变它的质量。这一切都是意料之中的。让我们看一个案例:
var Mercury:Body?
因此,Mercury
为零,因为您从未将其分配给任何对象。然后执行:
Mercury?.distanceToSun = 67790000
这表示“如果Mercury
不为零,则将该值指定给distanceToSun
”,因为Mercury
当然为零,这不起任何作用
我不清楚为什么这些是可选的。只要将它们设置为非可选的,大部分都会按预期工作。更好的是,去掉所有的默认值和选项,只是初始化一些东西
class Body {
let distanceToSun:Float80
let mass:Float80
let radius:Float80
}
let mercury = Body(distanceToSun: 6779000, mass = 300000000000000000000000, radius = 2440)
为什么这些都是变量?水星不太可能在程序运行期间显著改变其质量。您从未实际初始化过对象。更改为(我还将使变量名以小写字母开头):
您从未实际初始化过对象。更改为(我还将使变量名以小写字母开头):
您必须使用
()
初始值设定项初始化行星,并删除所有可选内容
class Body {
var distanceToSun:Float80 = 0.0
var mass:Float80 = 0.0
var radius:Float80 = 0.0
}
var Mercury = Body()
var Venus = Body()
var Earth = Body()
Mercury.distanceToSun = 67790000
Mercury.mass = 300000000000000000000000
Mercury.radius = 2440
Venus.distanceToSun = 108000000
Venus.mass = (Mercury.mass) * 14.7
Venus.radius = 6052
Earth.distanceToSun = 147000000
Earth.mass = (Venus.mass) * 1.266
Earth.radius = 6378
print(Earth.mass)
print(Mercury.radius)
print(Mercury.distanceToSun)
使用struct
可能更方便,因为您可以免费获得成员初始值设定项
struct Body {
var distanceToSun:Float80 = 0.0
var mass:Float80 = 0.0
var radius:Float80 = 0.0
}
var Mercury = Body(distanceToSun: 67790000, mass: 300000000000000000000000, radius: 2440)
var Venus = Body(distanceToSun: 108000000, mass: (Mercury.mass) * 14.7, radius: 6052)
var Earth = Body(distanceToSun: 147000000, mass: (Venus.mass) * 1.266, radius: 6378)
print(Earth.mass)
print(Mercury.radius)
print(Mercury.distanceToSun)
您必须使用
()
初始值设定项初始化行星,并删除所有可选内容
class Body {
var distanceToSun:Float80 = 0.0
var mass:Float80 = 0.0
var radius:Float80 = 0.0
}
var Mercury = Body()
var Venus = Body()
var Earth = Body()
Mercury.distanceToSun = 67790000
Mercury.mass = 300000000000000000000000
Mercury.radius = 2440
Venus.distanceToSun = 108000000
Venus.mass = (Mercury.mass) * 14.7
Venus.radius = 6052
Earth.distanceToSun = 147000000
Earth.mass = (Venus.mass) * 1.266
Earth.radius = 6378
print(Earth.mass)
print(Mercury.radius)
print(Mercury.distanceToSun)
使用struct
可能更方便,因为您可以免费获得成员初始值设定项
struct Body {
var distanceToSun:Float80 = 0.0
var mass:Float80 = 0.0
var radius:Float80 = 0.0
}
var Mercury = Body(distanceToSun: 67790000, mass: 300000000000000000000000, radius: 2440)
var Venus = Body(distanceToSun: 108000000, mass: (Mercury.mass) * 14.7, radius: 6052)
var Earth = Body(distanceToSun: 147000000, mass: (Venus.mass) * 1.266, radius: 6378)
print(Earth.mass)
print(Mercury.radius)
print(Mercury.distanceToSun)