我需要在 SwiftUI 视图的文本段落中使特定的带下划线的单词可点击。
目前我的 onTapGesture 适用于整个段落,但我只需要在Text(labelOne)(AKA Action)上使用它。
我无法在 Text(labelOne) 上使用 onTapGesture AND .underline,因为如果 underline() 放置在 onTapGesture {} 下,则会出现错误“无法将‘some View’类型的值转换为预期参数类型‘Text’”或“无法转换值”如果我将 onTapGesture{} 放在 .underline() 下,则“某些视图”类型将变为预期参数类型“文本”” 。
在这种情况下,我组合了文本视图,Text(“Action”)+ Text(“第一句结束。”)+ Text(“Body Text”),所以这就是阻止我将 .onTapGesture 与 .underline() 组合的原因
最好在段落内使用按钮,以便用户获得按下操作的视觉反馈,但不确定在不与文本分离的情况下这是否可能?
如果将 Text 放入 HStack 中(这将允许我将 .underline() 和 .onTapGesture{} 添加到特定视图),如果 Text(labelTwo) 的句子增长,则看起来很糟糕,请参见下文
struct TextView: View {
let labelOne: String = "Action"
let labelTwo: String = "end of first sentence."
let text: String = "Begining of second sentence lorem ipsum …Run Code Online (Sandbox Code Playgroud) 我正在我的视图模型中订阅 @Published 数组,这样我就可以 .map 作为 PostAnnotations 数组附加的每个对象...
我无法将 post 数组映射到 PostAnnotations 数组并收到错误:
错误消息:声明的闭包结果“()”不兼容
我究竟做错了什么??
class UserViewModel: ObservableObject {
var subscriptions = Set<AnyCancellable>()
let newPostAnnotationPublisher = PassthroughSubject<[PostAnnotation], Never>()
@Published var currentUsersPosts: [Posts] = []
func addCurrentUsersPostsSubscriber() {
$currentUsersPosts
// convert each post into a PostAnnotation
.map { posts -> [PostAnnotation] in
// ^ERROR MESSAGE: Declared closure result '()' is incompatible
//with contextual type '[SpotAnnotation]'
posts.forEach { post in
let postAnnotation = PostAnnotation(post: post)
return postAnnotation
}
}
.sink { [weak self] …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 SwiftUI 中创建一个子视图,可以选择从父视图中获取一个函数,以便我可以在未给出操作的情况下执行逻辑,或者如果给出了操作,则可以在 ChildView 中调用操作。
当我尝试运行我的代码时,我在调用中缺少参数“action”的参数,我无法弄清楚为什么,因为我在 ChildView 中将操作标记为可选,所以如果在父视图?
我在 ChildView 的公共初始值设定项中将操作标记为 @escaping,以满足编译器在单击“修复”后添加 @escaping 的要求,但不知道为什么或是否应该这样做?
如果我不将操作标记为 @escaping,则会收到错误将非转义参数“操作”分配给公共初始值设定项中的 @escaping 闭包。
也许公共初始化程序导致了我的问题,但我需要将其包含在我的案例中,但我认为我错误地初始化了可选函数?
我怎样才能完成我想做的事情?
家长观点
struct ParentView: View {
var body: some View {
ChildView() // ERROR: Missing argument for parameter 'action' in call???
}
}
Run Code Online (Sandbox Code Playgroud)
子视图
struct ChildView: View {
let action: () -> ()?
// ^ Should not have to be supplied since marked as optional??
public init(action: @escaping () -> ()? ) {
self.action …Run Code Online (Sandbox Code Playgroud)