小编Dáv*_*tor的帖子

如何在 SwiftUI 中更新文本标签?

我有一个 SwiftUI 文本标签,我想在按下按钮后在其中写一些东西。

这是我的代码:

Button(action: {
                registerRequest() // here is where the variable message changes its value
            }) {
                Text("SignUp")
            }
            Text(message) // this is the label that I want to change
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

ios swift swiftui

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

iOS 14 已更改(或损坏?)SwiftUI GeometryReader

从今天发布的 iOS 14.0 开始,我的 iOS 代码(严重依赖 GeometryReader 进行布局)不再运行良好。即,布局已经有点随机。

在 Xcode 调试器中,我比较了在 iOS 13.6 和 iOS 14.0 上运行的相同代码,发现问题在于 iOS 14.0 中未初始化 GeometryProxy 结构。

在变量 g 下方的示例代码中,GeometryProxy 在 iOS 13 中具有有效的宽度和高度值,但在 iOS 14 中全部为零。(这只是我对 GeometryProxy 值所做的更简单的使用之一——如果没有人,我将不胜感激指出一个明显的事实,这个片段可以通过另一种方式更容易地完成。)

这是对 GeometryReader 的更改还是错误?有人有解决方法吗?我是否在依赖 GeometryReader 进行动态布局时犯了一个巨大的错误?

struct TextView: View {
  @EnvironmentObject var data: RecorderData
  let m = MusicalNote()

  var body: some View {
      GeometryReader { g in
          Stack(alignment: .leading) {
              Text(self.data.curNote.getString())
                 .font(.system(size: g.size.height / 2.4))
                 .padding(.bottom)
              Text(self.data.fdata.fingerings[self.data.curRecorder.id] ![self.data.curNote.seq] ![self.data.curFingType] ![self.data.currentFingeringChoice].comment)
                 .font(.headline)
        }
      Spacer()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui ios14

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

Swift Combine - 等待所有发布者

我正在尝试使用 Swift combine 运行许多具有相同结果的任务。目前,每个任务都是一个将发出结果的发布者。现在我面临一个问题,我必须等待所有发布者发出元素然后继续。有点像调度组。我发现 zip(with: : :_) 操作符需要 4 个发布者。

https://developer.apple.com/documentation/combine/passthroughsubject/3333571-zip

但是如果您有一组发布者(以防它们发出相同类型的元素)怎么办?有没有办法做到这一点?

swift combine

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

{NSDecimalNumber integerValue}在iOS8中表现异常

好的团队,这很奇怪.[NSDecimalNumber integerValue]表现得很奇怪.

我坐在一个断点处,试图弄清楚为什么我的应用程序的某些部分在iOS8中被破坏了,而我正在查看一个名为"timeSeconds"的变量.在Xcode变量视图中看起来像这样:

_timeSeconds    (NSDecimalNumber *) 344.514533996581994496
Run Code Online (Sandbox Code Playgroud)

但是当我在调试器中查询它时,我看到了这个:

(lldb) p [self.timeSeconds doubleValue]
(double) $14 = 344.51453399658192
(lldb) p [self.timeSeconds intValue]
(int) $15 = 344
(lldb) p [self.timeSeconds integerValue]
(NSInteger) $16 = -5
(lldb) p (NSInteger)[self.timeSeconds intValue]
(NSInteger) $17 = 344
Run Code Online (Sandbox Code Playgroud)

看到"-5"?在我提交雷达之前,你们中的任何人都可以复制或解释这些吗?

这是SSCCE:

NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"344.514533996581994496"];
NSLog(@"%@", n); // 344.514533996581994496
NSLog(@"%ld", (long)[n intValue]); // 344
NSLog(@"%ld", (long)[n integerValue]); // -5
NSLog(@"%ld", (long)[n unsignedIntegerValue]); // 12
Run Code Online (Sandbox Code Playgroud)

提前致谢!

马修

objective-c nsdecimalnumber ios8

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

Swift开关模式与数组匹配

好奇如果有办法在Swift中执行以下操作.

let foo = [1, 2, 3]
let bar = [4, 5, 6]

let value = 5

switch value {
case in foo
    print("5 is in foo")
case in bar
    print("5 is in bar")
default:
    break
}
Run Code Online (Sandbox Code Playgroud)

我理解还有其他方法可以使这个人为的例子工作,比如case 4, 5, 6:使用或不使用开关而是使用,bar.contains(value)但我正在寻找一个专门涉及到数组的开关模式匹配的解决方案.谢谢!

arrays switch-statement ios swift

10
推荐指数
2
解决办法
3002
查看次数

“NSAttributedString”类型的值没有成员“addAttributes”

我检查了文档,方法在那里。

当我查看 .h 文件时,我确实看到了该功能。我尝试清理和重建,但在迁移到 Swift 4 后仍然出现此错误。

“NSAttributedString”类型的值没有成员“addAttributes”

在以下方面:

var options:[NSAttributedString.DocumentReadingOptionKey : Any] = [NSAttributedString.DocumentReadingOptionKey.documentType : NSAttributedString.DocumentType.html]
var attributedString = try NSAttributedString(data: data, options: options, documentAttributes: nil)
let range = (attributedString.string as NSString).range(of: attributedString.string)
attributedString.addAttributes(baseAttributes, range: range) // ERROR!
Run Code Online (Sandbox Code Playgroud)

nsattributedstring swift swift4

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

空Swift字符串内存分配布局(堆栈/堆分配)

在swift中,字符串是结构类型,因此值将存储在堆栈内存而不是堆中.

让我们说我们声明一个字符串:

let a = ""
let b = "o"
Run Code Online (Sandbox Code Playgroud)

这是一个空字符串,但是分配了一些内存.我需要知道给空字符串和字符串的内存有什么不同,让我们说计数1.


如果我们说: -

var str:String?
var str: String = ""
Run Code Online (Sandbox Code Playgroud)

通过绘图的内存布局的差异是我需要看到的.(堆栈/堆).

我试图在谷歌上找到这个,但我无法找到这个内存布局.

string memory-management swift

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

RxSwift 中的 PublishSubject 和 PublishRelay 有什么区别?

我是 RxSwift 编程的新手。编码时我对两者感到困惑。应该使用哪一个来存储表的数据源以及如何决定?

reactive-programming rx-swift

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

如何快速开始和结束一周?

如何快速开始和结束一周?这是我的代码

extension Date {
    var startOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 1, to: sunday)
    }

    var endOfWeek: Date? {
        let gregorian = Calendar(identifier: .gregorian)
        guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
        return gregorian.date(byAdding: .day, value: 7, to: sunday)
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样打电话

let startWeek = Date().startOfWeek
let endWeek = Date().endOfWeek
print(startWeek!)
print(endWeek!)
var dateFormat1 …
Run Code Online (Sandbox Code Playgroud)

time date swift

9
推荐指数
2
解决办法
5048
查看次数

如何使用数据和Codable优化Swift中NSAttributedString的存储?

我正在尝试在保存a的内容时优化存储空间NSTextView,即其NSTextStorage属性本身a NSAttributedString.

将其保存为Data,例如使用该rtfd(from:documentAttributes:)方法,并作为Codable结构的一部分,会产生非常大的字符串,比内容本身大得多,尤其是在将图像插入到内容中时NSTextView.例如,插入200K图像将生成5MB的JSON文件.

旁注:当Data对象直接编码而不是编码对象的属性时更糟糕,因为它是以小整数数组的形式编码而不是任意字符串.我不知道为什么,虽然我能够通过插入Data一个简单的包装结构来防止这种情况.

奇怪的是,使用ZIP压缩实际的JSON文件仍然会产生4MB的文件,只有20%的增益,因此我不清楚200K图像如何变成如此庞大,难以压缩的编码字符串.

我想弄清楚NSAttributedString使用Codable协议有效存储的正确方法是什么.非常感谢任何提示或建议.

我也想知道是否有一个有效的二进制编码选项Codable.

swift codable

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