Ios 我如何在Swift中重新设计这个Objective-C战略模式?
我看到了,但我对使用Swift设置相同的模式很好奇Ios 我如何在Swift中重新设计这个Objective-C战略模式?,ios,swift,Ios,Swift,我看到了,但我对使用Swift设置相同的模式很好奇 在Swift中,我将如何做类似的事情?您的链接示例中没有任何内容不能直接转换为Swift: class Dog { var position: Int = 0 var strategy: DogStrategy init(strategy: DogStrategy) { self.strategy = strategy } func updatePosition() {
在Swift中,我将如何做类似的事情?您的链接示例中没有任何内容不能直接转换为Swift:
class Dog {
var position: Int = 0
var strategy: DogStrategy
init(strategy: DogStrategy) {
self.strategy = strategy
}
func updatePosition() {
self.position = self.strategy.getNewPositionFromPosition(self.position)
}
}
class DogStrategy {
func getNewPositionFromPosition(position: Int) -> Int {
return position + 2;
}
}
尽管如此,我认为这是一个更好的实现,并作为一个协议加以说明(在Objective-C中也是可能的):
您的链接示例中没有任何内容不能直接转换为Swift:
class Dog {
var position: Int = 0
var strategy: DogStrategy
init(strategy: DogStrategy) {
self.strategy = strategy
}
func updatePosition() {
self.position = self.strategy.getNewPositionFromPosition(self.position)
}
}
class DogStrategy {
func getNewPositionFromPosition(position: Int) -> Int {
return position + 2;
}
}
尽管如此,我认为这是一个更好的实现,并作为一个协议加以说明(在Objective-C中也是可能的):
您的链接示例中没有任何内容不能直接转换为Swift:
class Dog {
var position: Int = 0
var strategy: DogStrategy
init(strategy: DogStrategy) {
self.strategy = strategy
}
func updatePosition() {
self.position = self.strategy.getNewPositionFromPosition(self.position)
}
}
class DogStrategy {
func getNewPositionFromPosition(position: Int) -> Int {
return position + 2;
}
}
尽管如此,我认为这是一个更好的实现,并作为一个协议加以说明(在Objective-C中也是可能的):
您的链接示例中没有任何内容不能直接转换为Swift:
class Dog {
var position: Int = 0
var strategy: DogStrategy
init(strategy: DogStrategy) {
self.strategy = strategy
}
func updatePosition() {
self.position = self.strategy.getNewPositionFromPosition(self.position)
}
}
class DogStrategy {
func getNewPositionFromPosition(position: Int) -> Int {
return position + 2;
}
}
尽管如此,我认为这是一个更好的实现,并作为一个协议加以说明(在Objective-C中也是可能的):
(16个月后……)
drewag的答案是好的,工作也很好,但由于在Swift中,函数是一级公民,因此可以通过取消围绕策略定义的协议和类来简化答案。类型别名的使用是可选的,但有助于代码的自文档化
class Dog {
var position: Int = 0
var strategy: DogStrategy
func updatePosition() {
position = strategy(position)
}
init(strategy: DogStrategy) {
self.strategy = strategy
}
}
/// The strategy is implemented by any function that takes a position and returns another.
typealias Position = Int
typealias DogStrategy = (Position) -> Position
// Strategy one.
func slowDogStrategy(position: Position) -> Position {
return position + 1;
}
// Strategy two,
func fastDogStrategy(position: Position) -> Position {
return position + 5;
}
var fastDog = Dog(strategy: fastDogStrategy)
var slowDog = Dog(strategy: slowDogStrategy)
(16个月后……)
drewag的答案是好的,工作也很好,但由于在Swift中,函数是一级公民,因此可以通过取消围绕策略定义的协议和类来简化答案。类型别名的使用是可选的,但有助于代码的自文档化
class Dog {
var position: Int = 0
var strategy: DogStrategy
func updatePosition() {
position = strategy(position)
}
init(strategy: DogStrategy) {
self.strategy = strategy
}
}
/// The strategy is implemented by any function that takes a position and returns another.
typealias Position = Int
typealias DogStrategy = (Position) -> Position
// Strategy one.
func slowDogStrategy(position: Position) -> Position {
return position + 1;
}
// Strategy two,
func fastDogStrategy(position: Position) -> Position {
return position + 5;
}
var fastDog = Dog(strategy: fastDogStrategy)
var slowDog = Dog(strategy: slowDogStrategy)
(16个月后……)
drewag的答案是好的,工作也很好,但由于在Swift中,函数是一级公民,因此可以通过取消围绕策略定义的协议和类来简化答案。类型别名的使用是可选的,但有助于代码的自文档化
class Dog {
var position: Int = 0
var strategy: DogStrategy
func updatePosition() {
position = strategy(position)
}
init(strategy: DogStrategy) {
self.strategy = strategy
}
}
/// The strategy is implemented by any function that takes a position and returns another.
typealias Position = Int
typealias DogStrategy = (Position) -> Position
// Strategy one.
func slowDogStrategy(position: Position) -> Position {
return position + 1;
}
// Strategy two,
func fastDogStrategy(position: Position) -> Position {
return position + 5;
}
var fastDog = Dog(strategy: fastDogStrategy)
var slowDog = Dog(strategy: slowDogStrategy)
(16个月后……)
drewag的答案是好的,工作也很好,但由于在Swift中,函数是一级公民,因此可以通过取消围绕策略定义的协议和类来简化答案。类型别名的使用是可选的,但有助于代码的自文档化
class Dog {
var position: Int = 0
var strategy: DogStrategy
func updatePosition() {
position = strategy(position)
}
init(strategy: DogStrategy) {
self.strategy = strategy
}
}
/// The strategy is implemented by any function that takes a position and returns another.
typealias Position = Int
typealias DogStrategy = (Position) -> Position
// Strategy one.
func slowDogStrategy(position: Position) -> Position {
return position + 1;
}
// Strategy two,
func fastDogStrategy(position: Position) -> Position {
return position + 5;
}
var fastDog = Dog(strategy: fastDogStrategy)
var slowDog = Dog(strategy: slowDogStrategy)