小编Ric*_*hiy的帖子

NSInteger乘法:二进制表达式的操作数无效

我尝试将两个NSIntegers相乘,但Xcode给了我一个错误:

NSInteger singlePage = ((NSInteger)floor((scrollView.contentOffset.x * 2.0f + pageWidth) / (pageWidth * 2.0f)));
NSInteger page = singlePage * visiblePages;  
Run Code Online (Sandbox Code Playgroud)

错误本身:

Invalid operands to binary expression ('NSInteger' (aka 'int') and 'NSInteger *' (aka 'int *'))  
Run Code Online (Sandbox Code Playgroud)

NSInteger visiblePages已经定义并正在传递给方法.
我认为编译器认为*是指针符号而不是乘法符号.有没有其他方法来乘以两个NSIntegers?

pointers objective-c multiplying nsinteger ios

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

UIStackView,2个标签:根据尺寸更改轴

我在水平 纸中嵌入了两个标签UIStackView。标签之一可能会变得太大,因此其中一个被截断了。

或者,它们的大小正在按一定比例分割,并且垂直增长。

我要实现的目标是,如果标签不合适,请UIStackView更改axis垂直

请参考以下两个数字:

图1:标签排成一行,使用水平轴。
图2:标签之一是多行。使用垂直轴。

使用UICollectionViewFlowLayout时,行为类似。

示例StackView行为

uilabel ios autolayout uistackview intrinsic-content-size

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

Swift Array:带IndexPath的下标 - 无法变异

我想的扩展名添加到阵列的阵列,以检索Element与所述IndexPath大小为2:

let array: [[String]] =  ....
let indexPath = IndexPath(indexes: [0, 0])
let string = array[indexPath]
Run Code Online (Sandbox Code Playgroud)

我得到一个错误无法通过下标下标分配是get-only同时实现以下扩展:

extension Array where Element : Collection, Element.Index == Int {
  subscript(indexPath: IndexPath) -> Element.Iterator.Element {
    get {
      return self[indexPath.section][indexPath.item]
    }
    set {
      self[indexPath.section][indexPath.item] = newValue
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

出现这种错误的原因是什么?如何在下标中添加变异选项 ?

arrays collections subscript ios swift

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

LLDB:查看 UIModalPresentationStyle 枚举的实际值

在使用为 实例的方法设置的断点进行调试时UIViewController,我决定检查 的值UIModalPresentationStyle

这是我得到的:

(lldb) po self.modalPresentationStyle
__C.UIModalPresentationStyle
Run Code Online (Sandbox Code Playgroud)

如何获取变量的实际值,而不是其类型?

我可以通过执行以下命令对其进行“逆向工程”:

(lldb) po self.modalPresentationStyle == .fullScreen
false
Run Code Online (Sandbox Code Playgroud)

但怎样才能更快达到想要的结果呢?

debugging xcode ios lldb

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

GitLab Runner macOS 作业失败,无法调试

我正在使用单个 macOS GitLab 运行程序来执行 iOS 作业。runner 已成功与 GitLab 配对并接收作业,但是,作业立即失败并且 runner 向 GitLab 报告。

通过查看运行器日志,我无法追踪问题,即使在--debug模式下运行 GitLab Runner 也是如此。

问题:

  1. 这个问题可能与什么有关?
  2. 如何收集更多有关它的信息?

GitLab 网页界面上的工作报告:

Running with gitlab-runner 11.7.0 (8cc638ff)
  on iMac 8cc638ff
Using Shell executor...
Running on name-iMac.local...
Fetching changes...
ERROR: Job failed: exit status 1
Run Code Online (Sandbox Code Playgroud)

gitlab-runner --debug run命令的输出:

Checking for jobs... received                       job=216 repo_url=https://gitlab.local/software/ios.git runner=00000000
Failed to requeue the runner:                       builds=1 runner=00000000
Running with gitlab-runner 11.7.0 (8bb608ff)        job=216 project=34 runner=00000000
  on iMac 00000000                                  job=216 project=34 runner=00000000
Shell configuration: …
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci-runner

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

KVO Swift:newValue 始终为零

有以下例子:

import UIKit

@objc class ViewController: UIViewController {

    @objc dynamic var buggyApple: NSObject?

    var obs: NSKeyValueObservation?

    override func viewDidLoad() {
        super.viewDidLoad()
        obs = observe(\.buggyApple, changeHandler: { (obj, change) in
            print(change)
        })
        buggyApple = NSObject()
        buggyApple = NSObject()
    }
}
Run Code Online (Sandbox Code Playgroud)

我在调试控制台中得到相应的输出:

NSKeyValueObservedChange<Optional<NSObject>>(kind: __C.NSKeyValueChange, newValue: Optional(nil), oldValue: Optional(nil), indexes: nil, isPrior: false)
NSKeyValueObservedChange<Optional<NSObject>>(kind: __C.NSKeyValueChange, newValue: Optional(nil), oldValue: Optional(nil), indexes: nil, isPrior: false)
Run Code Online (Sandbox Code Playgroud)

ViewController在 中的回调内检查断点上的对象时LLDB,我得到以下信息:

(lldb) po obj.buggyApple
? Optional<NSObject>
  - some : <NSObject: 0x600000908fa0>
Run Code Online (Sandbox Code Playgroud)

所以,实际上 newNSObject已经成功发送了,但是,change …

objective-c-runtime key-value-observing swift

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

SwiftUI:初始化程序中的绑定:默认值

考虑以下示例:

struct TestView: View {
    @Binding private var value: String
    init(value: Binding<String>) {
        self._value = value
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在TestView没有任何的情况下初始化Binding,即只需将其绑定到空字符串(如果调用者不需要连接该属性)?

理想情况下,我可以使用TestView这样的(有时):

TestView()
Run Code Online (Sandbox Code Playgroud)

我尝试在初始化程序中设置默认值,但显然它失败了:

init(value: Binding<String> = Binding<Strings>("")) {
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这个 API 问题吗?

binding ios swift swiftui combine

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

可选原始类型的字符串初始值设定项:Int? 双倍的?漂浮?等等

是否可以在不单独指定每种类型的情况下对上述所有类型进行扩展?

例如,这里是这样的扩展Double

extension String {
  init?(_ value: Double?) {
    if let nonOpt = value {
      self.init(nonOpt)
    } else {
      return nil
    }
  }
}


let nonOpt: Double = 1

let opt: Double? = 1

let string = String(opt)

print(string)
Run Code Online (Sandbox Code Playgroud)

如果可以使用原始类型初始化字符串,我想允许使用可选类型进行字符串初始化。

string type-systems initialization ios swift

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