相关疑难解决方法(0)

SwiftUI中的some关键字是什么?

新的SwiftUI教程具有以下代码:

struct ContentView: View {
    var body: some View {
        Text("Hello World")
    }
}
Run Code Online (Sandbox Code Playgroud)

第二行单词some和在其网站上被高亮显示,就像它是一个关键字一样。

Swift 5.1似乎没有some作为关键字,而且我也看不出该词some还有什么其他用处,因为它可以到达类型通常所处的位置。是否有Swift的未发布新版本?以某种我不知道的方式在类型上使用的函数吗?

关键字有some什么作用?

swift swift5.1

214
推荐指数
7
解决办法
2万
查看次数

在 SwiftUI 中显示空视图

在 SwiftUI 中,经常需要根据某些条件显示“空”视图,例如:

struct OptionalText: View {
  let text: String?

  var body: some View {
    guard let text = text else { return }

    return Text(text) 
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这并不编译自体guard必须返回一些观点,那就是当一个“空”的观点textnil。如何把这个例子被重写,使其和编译时会生成一个“空”的看法textnil

macos ios swift swiftui

15
推荐指数
3
解决办法
9548
查看次数

"Function declares an opaque return type [...]" error when declaring a view as a variable inside the body of a View in SwiftUI

Assume I have a View with an Image that has a shadow property:

struct ContentView: View {
    var body: some View {
        Image("turtlerock").shadow(radius: 10)
    }
}
Run Code Online (Sandbox Code Playgroud)

Now imagine I want to access the value of the shadow radius. I assumed I could do this:

struct ContentView: View {
    var body: some View {
        let myImage = Image("turtlerock").shadow(radius: 10)
        print(myImage.modifier.radius)
    }
}
Run Code Online (Sandbox Code Playgroud)

However, this returns an error:

Function declares an opaque return type, but has no return statements in its body …

swift swiftui

14
推荐指数
1
解决办法
4754
查看次数

SwiftUI中的List和ForEach有什么区别?

我知道SwiftUI目前不支持常规的for循环,而是提供了一个称为ForEach的东西,但是和List之间有什么区别?

swiftui

13
推荐指数
3
解决办法
5055
查看次数

在SwiftUI中有条件地使用视图

我正在尝试找出正确的方法来有条件地包含swiftui视图。我无法直接在视图内部使用if,而不得不使用堆栈视图来做到这一点。

这可行,但似乎会有更清洁的方法。

    var body: some View {
        HStack() {
            if keychain.get("api-key") != nil {
                TabView()
            } else {
                LoginView()
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

swift swiftui

12
推荐指数
5
解决办法
6599
查看次数

如何从 SwiftUI 的官方教程代码中解释 VStack{ .. } ?

在下面的代码中,我知道

  1. body是一个只有get一部分的计算属性。
  2. return 省略 VStack

但是{ .. }Vstack 之后是什么?这是初始化还是闭包?{} 里面有什么,我认为没有任何回报。

struct ContentView: View {
    var body: some View {
        VStack {
            MapView()
                .frame(height: 300)

            CircleImage()
                .offset(y: -130)
                .padding(.bottom, -130)

            VStack(alignment: .leading) {
                Text("Turtle Rock")
                    .font(.title)
                HStack(alignment: .top) {
                    Text("Joshua Tree National Park")
                        .font(.subheadline)
                    Spacer()
                    Text("California")
                        .font(.subheadline)
                }
            }
            .padding()

            Spacer()
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

swift swiftui

8
推荐指数
1
解决办法
763
查看次数

如何在 SwiftUI 中添加自定义容器视图

我很好奇您是否可以在 SwiftUI 中创建自定义容器视图。我知道您可以创建自定义内容视图,例如Text(),但不确定是否可以复制 say 的功能HStack { }

类似于:

HGrid {
    Text("Lorem ipsum")
    Text("Lorem ipsum")
}
Run Code Online (Sandbox Code Playgroud)

HGrid然后,自定义容器视图(又名)将Spacer()在每个添加的组件之间添加。本质上,例如,将其转换为:

HStack {
    Text("Lorem ipsum")
    Spacer()
    Text("Lorem ipsum")
}
Run Code Online (Sandbox Code Playgroud)

swift ios13 swiftui xcode11

6
推荐指数
1
解决办法
2509
查看次数

使用@ViewBuilder创建支持多个子视图的视图

SwiftUI中的某些视图(例如VStack和HStack)支持将多个视图作为子视图,如下所示:

VStack {
  Text("hello")
  Text("world")
}
Run Code Online (Sandbox Code Playgroud)

从我收集,他们使用ViewBuilder使之成为可能的解释在这里

我们如何使用@ViewBuilder创建自己的支持多个子视图的视图?例如,假设我要创建一个Layout接受任意子级的View,如下所示:

struct Layout : View {
  let content: Some View 

  var body : some View {
    VStack {
      Text("This is a layout")
      content()
    }
  } 
}
Run Code Online (Sandbox Code Playgroud)

知道如何在SwiftUI中实现此模式吗?

swift swiftui

6
推荐指数
2
解决办法
2141
查看次数

使用状态变量作为 SwiftUI 中函数的输入

我有两个文本字段,用于更改两个 @State 变量(即startingMileage 和endingMileage)的值,以及一个步进器,用于更改名为fuelAdded 的第三个@State 变量的值。我正在尝试使用用户的输入并进行计算来计算每加仑的英里数。在操场上,我的代码按预期工作。但是,它在 SwiftUI 项目中不起作用。

尝试在操场上运行代码如下:

func CalcMPG(start: String, end: String, fuel: Double) -> Int {
    let start = Int(start) ?? 1
    let end = Int(end) ?? 1
    let fuel = Int(fuel)
    let mpg = (end-start) / fuel
    return mpg
}


var endingMileage:String = "9250"
var startingMileage:String = "9000"
var fuelAdded:Double = 20

let milesPerGallon = CalcMPG(start: startingMileage, end: endingMileage, fuel: fuelAdded)
print("Fuel Efficiency: \(milesPerGallon) mpg")
Run Code Online (Sandbox Code Playgroud)

这按预期工作。

struct ContentView : View {

    @State var startingMileage: String = …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

5
推荐指数
1
解决办法
5019
查看次数

对成员'buildBlock()'的歧义引用

我一直在尝试使用Swift UI为iOS 13创建一个应用程序,但我不断收到这个奇怪的错误:“对成员'buildBlock()'的引用不明确”。

无论我做什么,错误都不会消失。

我尝试一次注释部分代码,以查看可能是引起问题的部分,但是唯一起作用的是注释掉整个视图。

我试过清理构建文件夹并删除派生数据。我还尝试过多次重启计算机和Xcode,但没有任何修复措施。

我很确定这只是一个Xcode错误,但是必须解决它,如果有人能告诉我那是什么,我将非常感谢。

var body: some View {
    GeometryReader { geometry in {
        VStack {
            Button (action: self.editProfilePicture) {
                    Image(ImageNames.AccountIconImageName, bundle: Bundle.main)
                        .resizable()
                        .frame(width: geometry.size.width / SizeConstants.AccountIconSizeDiviser, height: geometry.size.width / SizeConstants.AccountIconSizeDiviser)
                        .padding()
                        .background(ColorConstants.VeryLightGrayColor)
                        .clipShape(Circle())
                }
                .accentColor(.white)
                .padding(.bottom, LargePadding)

                ScrollView (showsVerticalIndicator: false) {

                    let const: Length? = geometry.size.width - SizeConstants.FullNameTextFieldWidthReduction

                    TextBox(textBinding: self.$fullName, placeHolder: Text(Strings.FullNameString), editChanged: self.fullNameChanged)/*.padding(.bottom, SmallPadding)*/.frame(width: const)
                    TextBox(textBinding: self.$username, placeHolder: Text(Strings.UsernameString), editChanged: self.usernameChanged)//.padding(.bottom)

                    Text(verbatim: Strings.ChooseIdType).font(.footnote).color(.gray)

                    TextBox(textBinding: self.$phoneNumber, placeHolder: Text(Strings.PhoneNumberString), editChanged: self.phoneNumberChanged)//.padding(.bottom, SmallPadding)
                    TextBox(textBinding: self.$emailAddress, placeHolder: Text(Strings.EmailAddressString), …
Run Code Online (Sandbox Code Playgroud)

xcode swift ios13 swiftui swift5.1

5
推荐指数
1
解决办法
912
查看次数

从 Swift 中的闭包返回多个 View 对象

我经常看到这样的代码:

VStack {
  Text("A")
  Text("B")
}
Run Code Online (Sandbox Code Playgroud)

通过查看 swift 教程,我知道这是将闭包指定为函数的最后一个参数的简写。但是,afaik 如果return没有指定关键字,闭包将隐式返回内部表达式的结果。

在这种情况下,有两个Text对象。它们是作为元组还是列表返回?我知道它有效,但我不清楚,关闭返回的到底是什么。

closures ios swift swiftui

3
推荐指数
1
解决办法
110
查看次数

标签 统计

swift ×10

swiftui ×10

ios ×2

ios13 ×2

swift5.1 ×2

closures ×1

macos ×1

xcode ×1

xcode11 ×1