我希望使用let
的常量可能是多个值中的一个。
例如:
if condition1 {
constant = "hi"
}
else if condition2 {
constant = "hello"
}
else if condition3 {
constant = "hey"
}
else if condition4 {
constant = "greetings"
}
我不确定如何使用Swift和let
功能。但我倾向于相信这是可能的,因为这是在Swift书中:
使用let生成常量,使用var生成变量。在编译时不需要知道常量的值,但是必须为其分配一次值。
我将如何做到这一点?
答案 0 :(得分:8)
正如其他答案所指出的,你不能直接这样做。但是,如果你只是想要改变一个常数的初始值,那么是的,这是可能的。这是一个带有计算属性的例子。
class MyClass {
let aConstant: String = {
if something == true {
return "something"
} else {
return "something else"
}
}()
}
答案 1 :(得分:2)
我认为您正在寻找一个可选项,稍后将在switch-case中分配:
let constant :String?
switch conditions {
case condition1:
constant = "hi"
case condition2:
constant = "hello"
case condition3:
constant = "hey"
case condition4:
constant = "greetings"
default:
constant = "salute"
}
答案 2 :(得分:2)
一个选项就是这样,使用闭包:
let constant: String = ({ value in
if conditionOne {
return "Hi"
} else if conditionTwo {
return "Bye"
}
return "Oops!"
})(myData /*needed for condition*/)
或者,对于另一种扭曲,使用泛型:
func fancySwitch<S, T>(val: S, fn: S -> T) -> T {
return fn(val)
}
let x: String = fancySwitch(3) { val in
if val == 2 {
return "Hi"
} else if val < 5 {
return "Bye"
}
return "Oops"
}
let y: String = fancySwitch((3, 4)) { (a, b) in
if a == 2 {
return "Hi"
} else if b < 5 {
return "Bye"
}
return "Oops"
}
答案 3 :(得分:2)
我明白你在寻找什么。在Scala和其他一些函数式语言中,这可以使用match
语句(类似于switch
)来完成,因为整个语句解析为这样的值:
val b = true
val num = b match {
case true => 1
case false => 0
}
遗憾的是,这在Swift中是不可能的,因为无法从分支语句中获取值。正如Swift一书中所述,&#34; Swift有两个分支语句:if语句和switch语句。&#34;这些陈述都没有解析为某个值。
我能想到的最接近的代码结构是首先使用变量来检索正确的值,然后将其分配给常量以便在以后的代码中使用:
let b = true
var num_mutable: Int
switch b {
case true:
num_mutable = 1
default:
num_mutable = 0
}
let num = num_mutable
答案 4 :(得分:2)
只需在if / else语句之前添加行let constant: String
。
下面,摘录自Swift 1.2 and Xcode 6.3 beta - Swift Blog - Apple Developer。
let
常量变得更加强大和一致-新规则是let
常量必须在使用之前进行初始化(例如var
),并且 它只能被初始化,之后不能重新分配或变异 初始化。这样可以启用以下模式:let x : SomeThing if condition { x = foo() } else { x = bar() } use(x)
这以前需要使用
var
,即使没有 发生突变。属性已折叠到此模型中,以 也简化了初始化程序中的语义。
我在上面的文章“ Let It Go: Late Initialization of Let in Swift”中找到了我的Swift博客文章,该文章是通过谷歌搜索发现的:swift let常量条件初始化。
答案 5 :(得分:0)
一种方法是:
var myVariable: String!
if condition1 {
myVariable = "hi"
} else {
myVariable = "bye"
}
let myConstant = myVariable