小编Cod*_*der的帖子

将完成处理程序汇集在一起​​,以便在执行多个闭包后方法完成

我有一个场景,我想并行执行三个不同的异步任务.完成所有三个任务后,我希望调用方法知道这一点并调用它自己的完成处理程序.

下面是一个非常简化的逻辑版本:

class ViewController: UIViewController {
    func doTasks(with object: Object, completionHandler: () -> Void) {
        // Once A, B & C are done, then perform a task
        wrapupTask()
        // When task is complete, call completionHandler
        completionHandler()
    }
}

fileprivate extension ViewController {
    func taskA(with object: Object, completionHandler: () -> Void) {
        // Do something

        completionHandler()
    }

    func taskB(with object: Object, completionHandler: () -> Void) {
        // Do something

        completionHandler()
    }

    func taskC(with object: Object, completionHandler: () -> Void) {
        // …
Run Code Online (Sandbox Code Playgroud)

ios swift3

1
推荐指数
1
解决办法
390
查看次数

为什么在swift中不允许使用开关盒的概念?

var index = 30

switch index {

   case 10  :    
      println( "Value of index is 10")
   case 20  :

   case 30  :    
      println( "Value of index is either 20 or 30")
   case 40  :    
      println( "Value of index is 40")
   default :    
      println( "default case")
}
Run Code Online (Sandbox Code Playgroud)

switch-statement ios swift

0
推荐指数
1
解决办法
455
查看次数

你能从它的 case 名称初始化一个 Enum 值吗(*不是*它的 RawValue?)

考虑这个枚举(注意它的类型是Int

enum MyTestEnum : Int{
    case one     = 1
    case eight   = 8
    case unknown = -1
}
Run Code Online (Sandbox Code Playgroud)

您可以根据原始值轻松初始化此版本,如下所示...

let value = MyTestEnum(rawValue:-1)
Run Code Online (Sandbox Code Playgroud)

我试图找出它是否可以用案例名称本身的字符串表示来初始化(同样,不是原始值,而是“案例”之后的词),就像这样......

let value = MyTestEnum(caseName:"eight")
Run Code Online (Sandbox Code Playgroud)

注意:如果可能,我希望它可以与任何枚举一起使用,无论其原始值类型如何。比如这个...

enum MyOtherEnum{
    case xxx
    case yyy
    case zzz
}

let value = MyOtherEnum(caseName:"xxx")
Run Code Online (Sandbox Code Playgroud)

那么这能做到吗?

想法:

  • 我认为 Swift 有一种方法可以在给定表示完全限定类名的字符串的情况下实例化一个类。也许可以在这里使用类似的东西。

enums initialization swift

0
推荐指数
1
解决办法
3819
查看次数

从 xc10 > xc11 迁移 SceneKit 应用程序时,我遇到“xcrun:错误:无法找到实用程序“scntool”,不是开发人员工具或在 PATH 中”

由于标题的字符限制,请允许我详细说明正在发生的事情。

我有一个使用 Xcode 10.2.1 构建时没有警告和错误的应用程序,但我想在最新的 Xcode 11 beta 中测试它。

然而,它在构建过程中会产生错误,但奇怪的是,该应用程序正确启动并可以在模拟器上使用。

错误:

xcrun:错误:无法找到实用程序“scntool”,不是开发人员工具或在 PATH 中

最初,我认为我的应用程序名称中的空格可能是一个问题,所以我很快将其重命名为使用 _ 代替空格,但这不起作用。

删除空格后重建应用程序还会显示以下警告:

copySceneKitAssets:警告:无法复制 SceneKit 资产,因为 scntool 无法处理以下资源:/Users/someidiot/Library/Developer/Xcode/DerivedData/Build/MyAmazingApp/Products/Debug-iphonesimulator/My_Amazing_App.app/art.scnassets/Game .scn

是的,文件就在那里:

在此输入图像描述

出于好奇,我清除了派生数据,以防出现问题。

rm -rf ~/Library/Developer/Xcode/DerivedData
Run Code Online (Sandbox Code Playgroud)

但是,与之前的情况相同...构建时出现警告和错误,但应用程序在模拟器上成功启动。

在此输入图像描述

我在这里担心的是,如果确实有问题,我想在它成为问题之前修复它,但同时该应用程序确实会成功启动。

不幸的是,我目前无法访问 iOS 13 设备来测试硬件。

xcode ios scenekit xcode11

0
推荐指数
1
解决办法
430
查看次数