小编G.A*_*sek的帖子

在变异函数和初始化程序中更改时 @State 不更新 SwiftUI 视图

我尝试了在 SwiftUI 视图中更新 @State 的不同方法。在某些方法中,状态更改会更新相关视图,而在某些方法中则不会。

@State更改更新视图

@State var bodyText: String = "Hello swift"

var body: some View {
    Text(bodyText)
        .onAppear(perform: triggerTextUpdate)
}

private func triggerTextUpdate() {
    DispatchQueue.main.asyncAfter(deadline: .now()+3) {
        bodyText = "Hello I am future swift"
    }
}
Run Code Online (Sandbox Code Playgroud)

@State 更改不更新视图

1.@State从初始化器改变

@State var bodyText: String = "Hello swift"
init() {
    triggerTextUpdate()
}

var body: some View {
    Text(bodyText)
}

private func triggerTextUpdate() {
    DispatchQueue.main.asyncAfter(deadline: .now()+3) {
        bodyText = "Hello I am future swift"
    }
}
Run Code Online (Sandbox Code Playgroud)

2.@State由变异函数改变

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

ios swift swiftui

7
推荐指数
1
解决办法
1318
查看次数

SWIFT ABI 在哪里发挥作用?

标题可能不足以概述问题上下文。所以这里是描述:

SWIFT 编译过程 Swift 编译器经过以下步骤来编译 Swift 文件

Swift 编译步骤

根据苹果公司的说法,

IR生成(在lib/IRGen中实现)将SIL降低为LLVM IR,此时LLVM可以继续优化它并生成机器代码。

查询号 1 - 我们都知道编译器将我们的源代码转换为汇编语言,而汇编器(主要嵌入在操作系统中,至少 Swift 编译器中没有汇编器)将其转换为机器代码。因此,根据上面引用的语句,编译器中的 LLVM 将 LLVM IR 更改为机器代码。那么如果是这种情况,那么汇编器在 Swift 程序和执行中就没有任何作用了?

查询号 2 - Swift 中的 LLVM 将 LLVM IR 直接更改为机器代码。这意味着我编译的可执行二进制文件具有机器代码,而不是汇编代码。根据我的理解,机器代码不需要像汇编语言那样的任何特定的调用约定,而 ABI 就是关于调用约定、内存布局表示等,通过它们定义两个二进制文件之间的通信。那么,由于二进制可执行文件已经具有机器代码,ABI 会出现在哪里呢?

那么,是我遗漏了一些东西,还是苹果让它变得非常抽象?

compiler-construction abi llvm ios swift

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

在 Swift 5 中使用动态值初始化属性包装器

设想:

  1. 我想要不同类型的债券,它们具有最小值、灵活利息当前债券价值(根据某些逻辑计算)和债券增长预测。

  2. 每当债券价值超过最小值时,增长预测就会升值和贬值,反之亦然。

  3. 我可以有多个具有自己一套价值观的纽带。

我正在尝试使用相同的属性包装器,以便我不会为每个键复制相同的行为:

 @propertyWrapper
struct BondValue {
    private var bondCurrentWorth: Int
    private var minimumValue: Int
    private var flexiInterest: Int

    var projectedValue: BondGrowth = .appreciating // The projected value projects the growth for the bond

    var wrappedValue: Int {

        get {
            return bondCurrentWorth
        }

        set {
            bondCurrentWorth = newValue + (newValue * flexiInterest/100)
            projectedValue = bondCurrentWorth < minimumValue ? .depriciating : .appreciating
        } 
 }

    init(wrappedValue: Int = 0, minimumValue: Int, flexiInterest: Int, value: Int) {
        self.minimumValue = minimumValue
        self.flexiInterest …
Run Code Online (Sandbox Code Playgroud)

properties wrapper ios swift5.1

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

帧与边界和自动布局约束?

我最近阅读了一个关于视图的框架和边界属性的精彩问题 - UIView frame, bounds and center。我也尝试使用自动布局对此进行更多实验,现在我发现自己处于一个非常矛盾的场景中。请耐心等待,因为这可能需要一点时间。

我会一一强调它们,所以请帮助我克服所有这些 -

我拥有的?——

带有约束的视图层次结构如下 - (设计是在默认的 ViewController 大小为 600*600 上完成的)

在此处输入图片说明

在此处输入图片说明

我试图打印出这些视图的框架和边界 -

内容视图

 print(contentView.frame)// o/p - (0.0, 64.0, 600.0, 536.0) 
  print(contentView.bounds)//o/p- (0.0, 0.0, 600.0, 536.0)
Run Code Online (Sandbox Code Playgroud)

Q) **a)**为什么无论我运行哪个屏幕,帧大小都显示为 600*536。例如。如果我在 4s 屏幕或 iPad 屏幕上运行它,它的打印结果是一样的吗?

**b)**它总是在我的故事板中推断出我的 VC 的大小!!。例如。如果我在 3.5 英寸 VC 中设计屏幕,则框架尺寸变为 320.0*416.0。

**c)**因为它固定到视图的所有边,所以它应该与视图大小相同,并且它始终保持固定到边缘。那么为什么它的大小不一样self.view.frame.width*self.view.frame.height

侧面图

print(sideView.frame)//o/p - (520.0, 86.0, 80.0, 128.0) 
   print(sideView.bounds)//o/p - (0,0, 80.0, 128.0)
Run Code Online (Sandbox Code Playgroud)

问)如果我以编程方式设计自定义 UIView

let TestView = UIView(frame: CGRectMake(520.0, 86.0, 80.0, 128.0))//Mark:its frame is exactly same as sideView.frame
        TestView.backgroundColor …
Run Code Online (Sandbox Code Playgroud)

frames bounds ios autolayout swift

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

Swift中的全局变量和可选绑定

关于可选绑定,全局变量以及包装和展开,我有一些非常简单的疑问.由于我是SWIFT的新手,因此了解其概念的山雀和部分非常重要.

1)在Swift中,如果我声明一个全局变量,我有两个选项可以使它成为可选或非可选,所以让我有2-4个或更多的可选变量.所以可取的是绑定所有这些变量

viewDidLoad() method// so that I could use them without any problem of unwrapping and fatal error in my program.
Run Code Online (Sandbox Code Playgroud)

2)让我通过以下示例让自己更清楚 - 我的项目VC1和VC2中有2个VC.VC2有一个文本字段,用户在其中输入一些值并在VC1的tabelview中显示.

在Vc1

var namevc1 = NSMutableArray?//holds the input of textfield to be passed from VC2. 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的VC1是第一个在我的项目运行时加载的视图控制器,我使用一个可选变量来填充我的tabke vuew

'arr'
Run Code Online (Sandbox Code Playgroud)

所以当应用程序第一次运行时它是空的.因此,在代码中使用其值时可能会导致致命错误.那么它的解决方案是什么解决方案呢?

viewDidLoad() 
Run Code Online (Sandbox Code Playgroud)

方法或全部声明一个空的NSMutable数组类型来代替可选类型.

提前致谢.

optional-variables ios9 swift2

0
推荐指数
1
解决办法
1375
查看次数