Swift “更好”;“无功能”;斯威夫特?
我有这个结构,Swift “更好”;“无功能”;斯威夫特?,swift,closures,Swift,Closures,我有这个结构, typealias Tweak = ( grab:(_ p: SomeClass)->CGFloat, change:(_ p: SomeClass, _ n: CGFloat)->(), from:CGFloat, upto:CGFloat ) (因此,第一行“给你一个值”,第二行“改变一些东西”,最后两行只是限制。) 所以,你可能有一系列这样的东西 var tweaks:[Tweak] = [ ({_ in 0}, {_ in},
typealias Tweak = (
grab:(_ p: SomeClass)->CGFloat,
change:(_ p: SomeClass, _ n: CGFloat)->(),
from:CGFloat, upto:CGFloat
)
(因此,第一行“给你一个值”,第二行“改变一些东西”,最后两行只是限制。)
所以,你可能有一系列这样的东西
var tweaks:[Tweak] = [
({_ in 0}, {_ in}, 0,0),
( {p in mainHeight},
{p, n in
mainHeight = n
paintDisplayWhatever()},
8.0, 28.0),
( {p in Some.global},
{p, n in
Some.global = n
fireball.adjust(heat: n)},
8.0, 28.0),
etc
我的问题
注意数组中的第一个,我只是希望它是调整的“无”版本
所以,我做了这个
nothingTweak: Tweak = ({_ in 0}, {_ in}, 0,0)
在Swift中,有没有更好的方法来完成两个“无”闭包,或者更正确的方法来完成整个过程
nothingTweak: Tweak = lessNilThanNil
你知道吗?没有表示“返回0CGFloat
值的闭包”的内置值,更不用说它们的元组以及另外两个零值了
但是,如果您创建一个类型(例如结构
)来表示调整
(而不是使用元组的类型别名
),则可以定义静态
常量来表示调整
的“默认”值。例如:
class SomeClass {}
struct Tweak {
// feel free to rename me to something more appropriate
static let zero = Tweak(grab: {_ in 0 }, change: {_ in }, from: 0, upto: 0)
var grab: (_ p: SomeClass) -> CGFloat
var change: (_ p: SomeClass, _ n: CGFloat) -> Void
var from: CGFloat
var upto: CGFloat
}
现在,无论在哪里需要Tweak
,您都可以说.zero
来表示您的“零默认值”(这正是像CGPoint
这样的类型所做的):
在本例中,创建结构比创建元组的typealias
更可取。元组实际上只是被设计成瞬态类型,而不是用于长期存储。结构更强大,更适合长期使用。请随意将我重命名为更合适的名称,因为某些原因,它会让我发出好笑的笑声!很乐意帮助@JoeBlow:)
var tweaks: [Tweak] = [
.zero,
Tweak(
grab: { p in 25 },
change: { p, n in
print(p, n)
},
from: 8, upto: 28
),
Tweak(
grab: { p in 27 },
change: { p, n in
print(p, n * 4)
},
from: 8, upto: 28
)
]