Swift可重用导航链接

Swift可重用导航链接,swift,swiftui,Swift,Swiftui,我的视图中有以下内容,其中NavigationLink的格式在几个方面是相同的。我希望能够减少重复,并为每个人重复使用相同的内容。我已经看到按钮可以这样做,但找不到导航链接的答案-这可能以类似的方式实现吗 NavigationLink(destination: FairRentView(viewModel: FairRentViewModel(Amounts(), housemates: 1))) { Text("

我的视图中有以下内容,其中NavigationLink的格式在几个方面是相同的。我希望能够减少重复,并为每个人重复使用相同的内容。我已经看到按钮可以这样做,但找不到导航链接的答案-这可能以类似的方式实现吗

NavigationLink(destination: FairRentView(viewModel: FairRentViewModel(Amounts(), housemates: 1)))
                {
                    Text("1")
                        .fontWeight(.bold)
                        .font(.title)
                        .lineLimit(0)
                        .padding()
                        .frame(minWidth: 0, maxWidth: 250, alignment: .center)
                        .background(gradient)
                        .foregroundColor(.white)
                        .padding(2)
                        .overlay(
                            RoundedRectangle(cornerRadius:20)
                                .stroke(gradient, lineWidth:15)
                        )
                        .overlay(
                            Image(systemName: "person.crop.circle.badge.plus")
                                .font(.largeTitle)
                                .padding(.leading)
                                .foregroundColor(.white)
                            , alignment: .leading)
                        .padding(5)
                    
                }
                NavigationLink(destination: FairRentView(viewModel: FairRentViewModel(Amounts(), housemates: 2)))
                {
                    Text("2")
                        .fontWeight(.bold)
                        .font(.title)
                        .padding()
                        .frame(minWidth: 0, maxWidth: 250, alignment: .center)
                        .background(gradient)
                        .foregroundColor(.white)
                        .padding(2)
                        .overlay(
                            RoundedRectangle(cornerRadius:20)
                                .stroke(gradient, lineWidth:15)
                        )
                        .overlay(
                            Image(systemName: "person.crop.circle.badge.plus")
                                .font(.largeTitle)
                                .padding(.leading)
                                .foregroundColor(.white)
                            , alignment: .leading)
                        .padding(5)
                }

您可以在扩展中使用修饰符,如下所示

extension Text {
    func styledLinkLabel<V: View & ShapeStyle>(with gradient: V) -> some View {
        self.fontWeight(.bold)
            .font(.title)
            .padding()
            .frame(minWidth: 0, maxWidth: 250, alignment: .center)
            .background(gradient)
            .foregroundColor(.white)
            .padding(2)
            .overlay(
                RoundedRectangle(cornerRadius:20)
                    .stroke(gradient, lineWidth:15)
            )
            .overlay(
                Image(systemName: "person.crop.circle.badge.plus")
                    .font(.largeTitle)
                    .padding(.leading)
                    .foregroundColor(.white)
                , alignment: .leading)
            .padding(5)
    }
}

如果将
.fontwweight(.bold).font(.title)
替换为
.font(font.title.weight(.bold))
可以将其作为视图扩展名(而不仅仅是文本)。
NavigationLink(destination: FairRentView(viewModel: FairRentViewModel(Amounts(), housemates: 2)))
{
    Text("2")
        .styledLinkLabel(with: gradient)
}