Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何完成任务:带选择和响应的查询(引擎)_Ios_Swift - Fatal编程技术网

Ios 如何完成任务:带选择和响应的查询(引擎)

Ios 如何完成任务:带选择和响应的查询(引擎),ios,swift,Ios,Swift,回答!我发布了一个答案,上面有我从Arbitur修改的代码。感谢Phillip给我的关键建议,引导我重新定位搜索 TLDR: 有没有从字符串运行函数的方法?类似于RunFunction(“myfunction_25;”+number+“()”),或者,是像myfunction_25; \&number()这样硬编码的一种方法 我是贾斯汀,这是我的第一篇帖子。在过去的两个月里,我努力工作,不想问任何问题,但我终于崩溃了。我会尽量简短,但我太罗嗦了(这篇冗长的介绍也没用)。提前感谢你的耐心 基本上,

回答!我发布了一个答案,上面有我从Arbitur修改的代码。感谢Phillip给我的关键建议,引导我重新定位搜索

TLDR:

有没有从字符串运行函数的方法?类似于RunFunction(“myfunction_25;”+number+“()”),或者,是像myfunction_25; \&number()这样硬编码的一种方法

我是贾斯汀,这是我的第一篇帖子。在过去的两个月里,我努力工作,不想问任何问题,但我终于崩溃了。我会尽量简短,但我太罗嗦了(这篇冗长的介绍也没用)。提前感谢你的耐心

基本上,我正在制作一个引擎,将简单的单词和短语转换成快速的代码;它的目标是能够快速制作文本游戏、教育应用程序以及任何涉及非线性问题/答案集的东西,这些问题/答案会根据你的反应而变化

现在,我正在做一件我认为很简单的事情:存储标签和按钮的实际文本(我在Xcode/iOS atm中工作)。我决定像电影制作人/小说家那样对它进行建模:电影是由片段组成的场景组成的。您也可以将其视为章节/段落

因此(非实际代码):

……等等

按照我的想法(和程序),我倾向于尽可能避免类,而不是严格的数据或严格的函数结构

因此,我的第一个解决方案是创建一个带有嵌套函数的结构(或类):

struct场景列表{
//fScene调用,并通过单击按钮传递剪辑
func fPlayClip(clipNUM:Int)
{
//做一些逻辑动作,然后播放正确的片段
}
//从主屏幕上的按钮点击调用;在剪辑中传递#
func fScene1(播放剪辑剪辑编号:Int){
//子功能(S1)
func fClip1(){print(“我是场景1,剪辑1”)}
func fClip2(){print(“我是场景1,剪辑2”)}
fPlayClip(剪辑编号)
}
func fScene2(播放剪辑剪辑编号:Int){
//子功能(S2)
func fClip1(){打印(“Yo,场景2,剪辑1”)}
func fClip2(){打印(“Yo,场景2,剪辑2”)}
fPlayClip(剪辑编号)
}
}
不幸的是,这个设计失败了,因为我无法从fPlayClip()调用子函数,所以我采用了另一种方法:

//////////////////////////
/////SceneList.swift//
//////////////////////////  
结构场景1{
func fClip1(){print(“我是场景1,剪辑1”)}
func fClip2(){print(“我是场景1,剪辑2”)}
结构场景2{
func fClip1(){打印(“Yo,场景2,剪辑1”)}
func fClip2(){打印(“Yo,场景2,剪辑2”)}
//////////////////////////
////////Main.swift//
//////////////////////////  
//结构/剪辑的实现。
//(播放场景在按钮单击方法中调用。)
func游戏场景(/*按钮婴儿车转到此处*/){
//开关(){case desired://Solve for X,
var oScenePlayer=SceneX()//其中X是所需的场景
//开关(){case desired://Solve for Z,
oScenePlayer.fClipZ()//其中Z是所需的剪辑
}
同样,这失败了,因为我不能只使用一个对象[oScenePlayer],因为每个结构都是不同的类型

然后,我四处寻找了一段时间,试图找出一种方法来破坏这个对象,然后重新创建它,但我做不到。然后,我四处寻找一种方法,将一个对象重新分配给另一个类类型,但做不到。然后,我仔细研究了扩展、协议、泛型类型等,试图找到一种方法来扩展/固有地将它分配给w但失败了

现在,我的最后两个/工作/解决方案是,只需在场景更改时创建一个新对象,然后等待ARC或任何东西来销毁旧对象;或者,让我回到第一个示例,简单地将[FplaySece]嵌入到每个函数中:

//解决方案1:
结构场景列表{
func fScene1(播放剪辑剪辑编号:Int){
//子功能(S1)
func fClip1(){print(“我是场景1,剪辑1”)}
func fClip2(){print(“我是场景1,剪辑2”)}
//做下面的逻辑题,解决Y
所需情况:
fClipY()
}
}
//解决方案2:
//////////////////////////
/////SceneList.swift//
//////////////////////////  
结构场景1{
func fClip1(){print(“我是场景1,剪辑1”)}
func fClip2(){print(“我是场景1,剪辑2”)}
}
//等等。。。
//////////////////////////
////////Main.swift//
//////////////////////////  
//////////////////////////
//在全球化区域内:
让oScene1:场景1,
oScene2:场景2
//等等。。。
var global_next_scene=1
变量全局\u下一个\u片段=1
/////////////////////////////////
//在按钮调用方法中:
func播放场景(下一个场景:Int,下一个片段:Int){
切换(下一个场景){//查找场景
案例1:
oScene1=场景1()
切换(下一个剪辑){//播放剪辑
案例1:
oScene1.fClip1()
}
}
基本上,我觉得我使用了太多的switch语句,在太多的地方(可能有数百个场景和数千个片段),当像
RunFunction(“fClip”+next_clip+“()”)
这样简单的函数可以工作时,但我不知道有任何“从字符串执行swift命令”函数:(或者,我可以像<代码> FCclip\NxTyCclipse())/代码>一样硬代码,我认为在15年前,当我最后编程任何< /P>时,C++是可能的。 我想出了一些其他疯狂的想法来实现它,我甚至想到了OOP(颤栗)嵌入式类,并让成员变量保存子类的实例,但根据我目前的知识/资源,我找不到比前两个代码片段更简单的方法来实现这一点

所有的结构、成员函数、switch语句等都将通过我的引擎自动生成——所以我并不是这么想的
App = (Scene 1 -> Scene 2 -> Scene 3, etc)
Scene 1 = (Clip 1 -> Clip 2 -> Clip 3, etc)
Scene 2 =  Clip 2 -> Clip 5 -> Clip 1, based on responses                        
class Clip {
    func play() {
        print("Playing \(self)")
    }
}

class Scene {
    var clips = [Clip]()
    func play() {
        print("Playing \(self)")
        for aClip in clips {
            aClip.play()
        }
    }
    func playClip(number: Int) {
        if number >= 0 && number < clips.count {
            clips[number].play()
        }
    }
}

class SceneList {
    var scenes = [Scene]()
    func play() {
        print("Playing \(self)")
        for aScene in scenes {
            aScene.play()
        }
    }
    func playScene(number: Int) {
        if number >= 0 && number < scenes.count {
            scenes[number].play()
        }
    }
}

var list = SceneList()
for _ in 0..<2 {
    var scene = Scene()
    list.scenes.append(scene)
    for _ in 0..<3 {
        scene.clips.append(Clip())
    }
}
list.play()