swift - 这个简单的 Swift 函数构建器示例有什么问题?
问题描述
我正在尝试使用 XCode 11 中的函数构建器并构建了这个简单的游乐场。它似乎没有使用函数构建器将输入转换为所需的结果闭包,但我觉得我一定在某处遗漏了这一点。最后一行报告的错误是cannot convert value of type '(Int, Int)' to closure result type 'Scene'
import SpriteKit
public protocol Scene {
var width : Int {get}
var height : Int {get}
}
public struct EmptyScene : Scene {
public let width : Int
public let height: Int
}
@_functionBuilder public struct SceneBuilder {
public static func buildBlock(_ size:(Int,Int))->Scene {
return EmptyScene(width: size.0, height: size.1)
}
}
extension SKScene {
public convenience init(@SceneBuilder _ scene : () -> Scene){
let definition = scene()
self.init(size: CGSize(width: definition.width, height: definition.height))
}
}
SKScene {
(320,256)
}
解决方案
我认为你错过了一步。我认为函数构建器是我必须添加到函数的注释,因此带注释的函数具有更好的调用站点(只有大括号内的一些值,可以帮助快速组合/探索)。我对 SpriteKit 了解不多,但编译器对此很满意:
import PlaygroundSupport
import SpriteKit
import SpriteKit
public protocol Scene {
var width : Int {get}
var height : Int {get}
}
public struct EmptyScene : Scene {
public let width : Int
public let height: Int
}
@_functionBuilder public struct SceneBuilder {
public static func buildBlock(_ size:(Int,Int))->Scene {
return EmptyScene(width: size.0, height: size.1)
}
}
extension SKScene {
public convenience init(@SceneBuilder _ scene : () -> Scene){
let definition = scene()
self.init(size: CGSize(width: definition.width, height: definition.height))
}
}
*here*
@SceneBuilder
func buildDaScene() -> Scene { (320, 256) }
SKScene { buildDaScene() }
推荐阅读
- javascript - js mongoDb 复制项给出外部数据
- go - 在我关闭连接或退出我的客户端应用程序之前,golang 连接不会写入
- excel - Excel“将随机值放入单元格并运行排列”最简单的问题
- ios - IOS:发送大数据视频
- python - 使用 ImageDataGenerator 进行随机正交、90 度旋转
- gstreamer - hlssink 不分割视频也不创建播放列表
- microsoft-teams - 是否可以以编程方式(例如使用图表)将选项卡添加到聊天中
- hibernate - hibernate + 单表继承 + discriminatorColumn --> DiscriminatorType 无法解析为变量
- operating-system - 为未加密的文件设置密码
- python - 迭代地在二叉树中插入值