SwiftUI文本字段可以与可选绑定一起使用吗?当前此代码:
struct SOTestView : View {
@State var test: String? = "Test"
var body: some View {
TextField($test)
}
}
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
无法将类型'Binding <String?>'的值转换为预期的参数类型'Binding <String>'
有没有办法解决?在数据模型中使用Optionals是一种非常常见的模式-实际上,这是Core Data中的默认设置,因此SwiftUI不支持它们似乎很奇怪
在Swift 4中,许多基金会团队已经讨论过使用keyPaths与Swift 3相比有多容易.这引出了一个问题......什么是keyPath?说真的,我找不到任何明确的资源.
我有,
struct S {}
Run Code Online (Sandbox Code Playgroud)
随着,
func y (x: S) -> AnyObject {}
Run Code Online (Sandbox Code Playgroud)
在Swift 2中,是否有可能在y()中,
return x
Run Code Online (Sandbox Code Playgroud)
我目前的代码:
struct S {let value: Int = 0}
let x = S()
func y(x: S) -> AnyObject {return x}
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
'S'类型的返回表达式不符合'AnyObject'类型
有没有办法缓解这种情况?
假设如下:
class A {
let x : Int
init() {
self.x = assign(1)
}
func assign(y : Int) -> Int {
return y
}
}
Run Code Online (Sandbox Code Playgroud)
这会产生错误。
这是我的问题:有没有办法在类初始值设定项中调用函数?
编辑:添加错误消息:
在初始化所有存储的属性之前,在方法调用“分配”中使用“self”
所以我正在尝试使用 SwiftUI 设置 CoreData,并且 CoreData 模型和 SwiftUI 视图都在工作。我需要做的就是连接它们。我能够传递离散数量的 BindableObjects 但我需要的是传递一个数组。这是设置:
let peristence = PersistenceManager()
var model = [Entry]() // Entry Conforms to NSManagedObject and BindableObject
let request = Entry.createFetchRequest()
let sort = NSSortDescriptor(key: "callsign", ascending: true)
request.sortDescriptors = [sort]
do {
model = try peristence.persistenceContainer.viewContext.fetch(request)
} catch {
fatalError(error.localizedDescription)
}
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: ContentView().environmentObject(model))
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
实例方法“environmentObject”要求“[Entry]”符合“BindableObject”
我将如何使其[Entry]符合?
Swift标准库断言:
下降(同时:)
通过跳过元素返回子序列,同时谓词返回 true 并返回剩余元素。
通过使用函数签名:
Run Code Online (Sandbox Code Playgroud)func drop(while predicate: (Self.Element) throws -> Bool) rethrows -> Self.SubSequence
其中predicate描述为:
一个闭包,它将序列的元素作为其参数,并返回一个布尔值,指示该元素是否匹配。
我的问题是,根据该描述,不应发生以下行为:
let test = (0...3).drop { $0 > 1 }
test.contains(0) // true
test.contains(3) // true
Run Code Online (Sandbox Code Playgroud) 在UIKit中,您可以使用allowMultipleSelection选择UITableView的多行-可以使用SwiftUI中的List完成吗?
NavigationLinkSwiftUI 中可以有多个s 吗?以下仅显示第一个链接:
struct Test : View {
var body: some View {
NavigationView {
NavigationLink(destination: Text("First")) {
Text("Visible")
}
NavigationLink(destination: Text("Second")) {
Text("Invisible")
}
//EDIT: Also Invisible
Text("Not rendered")
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:原来第一个下的所有内容都NavigationLink没有显示
这来自Swift标准库文档:
relative(to:)返回此范围表达式描述的给定集合中的索引范围.
这是方法签名:
func relative<C>(to collection: C) -> Range<Self.Bound> where C : _Indexable, Self.Bound == C.Index
Run Code Online (Sandbox Code Playgroud)
除了它的解释:
参数
采集
用于评估此范围表达式的集合.
回报价值
适合切片收集的范围.返回的范围不保证在集合的范围内.呼叫者应该对返回值应用与用户直接提供的范围相同的前提条件.
最后,这是我的测试代码:
let continuousCollection = Array(0..<10)
var range = 0..<5
print(range.relative(to: continuousCollection))
//0..<5
range = 5..<15
print(range.relative(to: continuousCollection))
//5..<15
range = 11..<15
print(range.relative(to: continuousCollection))
//11..<15
let disparateCollection = [1, 4, 6, 7, 10, 12, 13, 16, 18, 19, 22]
range = 0..<5
print(range.relative(to: disparateCollection))
//0..<5
range = 5..<15
print(range.relative(to: disparateCollection))
//5..<15
range = 11..<15
print(range.relative(to: disparateCollection)) …Run Code Online (Sandbox Code Playgroud) 我正在为Swift 2中的命令行编写BASIC解释器,我找不到实现简单命令CLS的方法(清除终端中的所有文本.)我应该只是在循环中打印空格,还是有一个函数我不知道这会清除终端屏幕吗?
我正在尝试为我的模式表实现一个关闭按钮,如下所示:
struct TestView: View {
@Environment(\.isPresented) var present
var body: some View {
Button("return") {
self.present?.value = false
}
}
}
struct DataTest : View {
@State var showModal: Bool = false
var modal: some View {
TestView()
}
var body: some View {
Button("Present") {
self.showModal = true
}.sheet(isPresented: $showModal) {
self.modal
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在点击返回按钮时没有任何作用。显示模式时,控制台中将显示以下内容:
[WindowServer] display_timer_callback:意外状态(现在:5fbd2efe5da4 <预期:5fbd2ff58e89)
如果您强行打开包装,present您会发现它是nil
如何以.sheet编程方式解雇?
检查以下字典:
var testDict: [String : Int] = [
"a" : 1,
"b" : 2,
"c" : 3,
"d" : 4
]
Run Code Online (Sandbox Code Playgroud)
现在,遍历字典的键:
for i in testDict.keys {
print(i)
}
Run Code Online (Sandbox Code Playgroud)
这将产生以下输出:
百特
但是,预期的输出将是编码顺序中的键:
A B C D
因为不是这种情况,所以我假设键已排序。如果是这样,如何对它们进行排序,更重要的是,如何将它们返回到编写时的顺序?
swift ×8
swiftui ×5
collections ×2
macos ×2
range ×2
swift4 ×2
casting ×1
class ×1
command-line ×1
core-data ×1
dictionary ×1
foundation ×1
ios ×1
protocols ×1
sequence ×1
sorting ×1
terminal ×1