SwiftUI 查看和 Swift 包管理器
SwiftUI View and Swift Package Manager
我正在尝试创建一个 Swift 包,它基本上是一个 SwiftUI 视图。我在这里创建了一个示例来显示正在发生的事情。打包的内容无关紧要,我刚刚在视图中包含了一些@State 和@Binding 变量,这样我得到的错误与我在真实包中遇到的错误相同。
视图结构是这样的。
import SwiftUI
public struct SampleView: View {
@Binding var myNum:Int
@State var fixedText:String = ""
var myText = ""
var optional: String?
public var body: some View {
VStack {
if optional != nil {
Text(optional!)
}
Text(myText)
Text("Parent number: \(myNum)")
Text("\(fixedText)")
Button("Increment num") {
self.myNum += 1
}.foregroundColor(.blue)
Button("Change Parent Text") {
self.fixedText = "Only Changes Child"
}.foregroundColor(.blue)
}.background(Color.red)
.foregroundColor(.white)
}
}
当我添加包并将其导入项目中的一个视图时,如果视图不是 Swift 包的一部分,我应该可以使用 Do something like this :
SampleView(myNum: $myNum,
fixedText: parentText,
myText: "Display Text Passed from parent")
但是,我没有完成任何代码,并且出现错误:
'SampleView' initializer is inaccessible due to 'internal' protection level
我已尝试对 SampeView 结构进行各种初始化,但不断收到各种不同的错误。我只是不明白如何在此处修复访问级别。谁能帮忙?截图也在这里。
这是包中的预期声明(使用 Xcode 11.2.1 / iOS 13.2.2 测试)。请注意 @State
不允许在 View 之外使用,因此您需要同步的所有内容都应通过 Binding
:
传递
public struct SampleView: View {
@Binding var myNum:Int
@Binding var fixedText:String
var myText: String
var optional: String?
public init(myNum: Binding<Int>, fixedText: Binding<String>,
myText: String = "", optional: String? = nil) {
self._myNum = myNum
self._fixedText = fixedText
self.myText = myText
self.optional = optional
}
public var body: some View {
VStack {
if optional != nil {
Text(optional!)
}
Text(myText)
Text("Parent number: \(myNum)")
Text("\(fixedText)")
Button("Increment num") {
self.myNum += 1
}.foregroundColor(.blue)
Button("Change Parent Text") {
self.fixedText = "Only Changes Child"
}.foregroundColor(.blue)
}.background(Color.red)
.foregroundColor(.white)
}
}
和用法:
@State private var myNum: Int = 1
@State private var parentText = "Test"
var body: some View {
SampleView(myNum: $myNum,
fixedText: $parentText,
myText: "Display Text Passed from parent")
}
我正在尝试创建一个 Swift 包,它基本上是一个 SwiftUI 视图。我在这里创建了一个示例来显示正在发生的事情。打包的内容无关紧要,我刚刚在视图中包含了一些@State 和@Binding 变量,这样我得到的错误与我在真实包中遇到的错误相同。 视图结构是这样的。
import SwiftUI
public struct SampleView: View {
@Binding var myNum:Int
@State var fixedText:String = ""
var myText = ""
var optional: String?
public var body: some View {
VStack {
if optional != nil {
Text(optional!)
}
Text(myText)
Text("Parent number: \(myNum)")
Text("\(fixedText)")
Button("Increment num") {
self.myNum += 1
}.foregroundColor(.blue)
Button("Change Parent Text") {
self.fixedText = "Only Changes Child"
}.foregroundColor(.blue)
}.background(Color.red)
.foregroundColor(.white)
}
}
当我添加包并将其导入项目中的一个视图时,如果视图不是 Swift 包的一部分,我应该可以使用 Do something like this :
SampleView(myNum: $myNum,
fixedText: parentText,
myText: "Display Text Passed from parent")
但是,我没有完成任何代码,并且出现错误:
'SampleView' initializer is inaccessible due to 'internal' protection level
我已尝试对 SampeView 结构进行各种初始化,但不断收到各种不同的错误。我只是不明白如何在此处修复访问级别。谁能帮忙?截图也在这里。
这是包中的预期声明(使用 Xcode 11.2.1 / iOS 13.2.2 测试)。请注意 @State
不允许在 View 之外使用,因此您需要同步的所有内容都应通过 Binding
:
public struct SampleView: View {
@Binding var myNum:Int
@Binding var fixedText:String
var myText: String
var optional: String?
public init(myNum: Binding<Int>, fixedText: Binding<String>,
myText: String = "", optional: String? = nil) {
self._myNum = myNum
self._fixedText = fixedText
self.myText = myText
self.optional = optional
}
public var body: some View {
VStack {
if optional != nil {
Text(optional!)
}
Text(myText)
Text("Parent number: \(myNum)")
Text("\(fixedText)")
Button("Increment num") {
self.myNum += 1
}.foregroundColor(.blue)
Button("Change Parent Text") {
self.fixedText = "Only Changes Child"
}.foregroundColor(.blue)
}.background(Color.red)
.foregroundColor(.white)
}
}
和用法:
@State private var myNum: Int = 1
@State private var parentText = "Test"
var body: some View {
SampleView(myNum: $myNum,
fixedText: $parentText,
myText: "Display Text Passed from parent")
}