我有一个iOS应用,我想在其中实现订阅模型。但是,用户要购买的商品要求我经常编写新的Swift类。
我希望不必依靠用户更新应用程序来查看新内容。有没有一种方法可以在构建时从一个可能从服务器部署的任意文本文件实例化一个类?
编辑:阅读您的评论后,我已经回到现实,但是我还将添加一些代码来阐明我的用例。也许还有另外一种解决方案我不见了。
本质上,此应用中的“资产”是算法生成的音乐。因此,一个项目可能包含连接在一起的AudioKit节点。我可能有这样的课程:
class sawtooth:sound {
var pwmOscillator:AKPWMOscillator? // = AKTable(.sawtooth, count: 4_096)
var countDownToNextPitch:Double
var sawtoothTwo:AKTable
var oscillatorTwo:AKOscillator
var lpf:AKLowPassFilter
// ... instantiate more nodes and parameters
init (filterFactor: Double) {
self.pwmOscillator = AKPWMOscillator(frequency: 32.7031956626)
self.pwmOscillator?.pulseWidth = 0.2
self.sawtoothTwo = AKTable(.sawtooth, count: 4_096)
self.oscillatorTwo = AKOscillator(waveform: sawtoothTwo)
self.oscillatorTwo.frequency = 65.4063913251
self.oscillatorTwo.amplitude = 0
self.chorusMixer = AKMixer(self.pwmOscillator!, self.oscillatorTwo)
// ...etc.
}
func behavior(atTime:Double, withProgramInstance:program) {
// Add parameters that define how sound evolves with time
}
}
在不进行硬更新的情况下部署其中的一些东西将是很棒的。但是,如果那不可能,那是不可能的。
答案 0 :(得分:1)
即使您使用的是订阅模式,您的应用程序也必须已经具备了提供高级内容所需的一切。我看到的唯一解决方案是在客户端上具有可以由服务器端配置的模型。为了简化:
请考虑您拥有要在用户购买资产时启用的资产。 假设您有一个这样的模型类
class Asset {
var id: Int
var nodes: [MyNode]
func connect(to: SomeObject) {
{...} //Some nodes related logic etc
}
}
class MyNode {
var type: MyNodeType
var oscillator: Oscillator
var {...}
}
基本上,您要做的是从后端获取资产配置,例如JSON。然后,您只需从此配置文件创建对象。无需实际对应用程序中的所有内容进行硬编码,只需要为节点使用适当的可重用模型即可。您可以从服务器获得。