我想创建一个工厂函数,它接受一个类类型并返回一个构造函数,以便我可以使用该构造函数稍后创建该类的实例.
想象一下,我有两个类,Apple和Orange,它们都是Fruit的子类.它们需要初始化unknownNumber,我将在稍后才知道.
class Apple: Fruit {
init(unknownNumber: Int) {
...
}
}
class Orange: Fruit {
init(unknownNumber: Int) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个接受Class类型的工厂函数,以便稍后我可以使用unknownNumber调用此函数并初始化Fruit的特定子类.
//concept:
func makeFruit(typeOfFruit) -> (Int) -> Fruit {
return { (unknownNumber: Int) -> Fruit in
return typeOfFruit(unknownNumber)
}
}
Run Code Online (Sandbox Code Playgroud)
要创建一个orangeFactory,那么,我可以这样做:
let orangeFactory = makeFruit(Orange)
// then at a later time when I have the unknown number
let orangeInstance = orangeFactory(unknownNumber)
Run Code Online (Sandbox Code Playgroud)
我知道只是制作unknownNumber一个惰性变量的选项,但在我的具体情况下,unknownNumber它不仅仅是一个数字而且它涉及其他进程,所以我只想在我有一切可用时创建对象,以保持结构简单.
在Swift中这样的事情可能吗?我已经在网上研究了一段时间,似乎找不到任何直接的答案.任何帮助将不胜感激!
我实际上是尝试使用RVM在OSX 10.7.5上更新ruby ,并在输入以下命令后:
rvm install ruby
Run Code Online (Sandbox Code Playgroud)
我收到了以下回复:
Searching for binary rubies, this might take some time.
Checking requirements for osx.
Installing requirements for osx.
Updating system.......
Error running 'requirements_osx_brew_update_system ruby-2.0.0-p247',
please read /Users/username/.rvm/log/1381215459_ruby-2.0.0-p247/update_system.log
Requirements installation failed with status: 1.
Run Code Online (Sandbox Code Playgroud)
然后,当我检查出来时update_system.log,它向我展示了一个名为的函数的实际代码requirements_osx_brew_update_system(),其中包含以下错误消息:
Xcode version older than 4.6.2 installed, download and install newer version from:
http://connect.apple.com
After installation open Xcode, go to Downloads and install Command Line Tools.
Run Code Online (Sandbox Code Playgroud)
然后我继续寻找Xcode的更新,但只发现了最新的Xcode 5.0,这显然与我的OSX 10.7不兼容.虽然最终我的目标是更新ruby并安装rails,我确信还有很多其他方法可做,但我仍然想知道是否可以在我的OSX 10.7上安装Xcode 4.6.2.
constructor ×1
homebrew ×1
inheritance ×1
osx-lion ×1
ruby ×1
rvm ×1
swift ×1
swift2 ×1
xcode ×1