小编mik*_*ike的帖子

在Swift中将参数传递给选择器

我是以编程方式将UITapGestureRecognizer添加到我的一个视图中:

let gesture = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(modelObj:myModelObj)))

self.imageView.addGestureRecognizer(gesture)

func handleTap(modelObj: Model) {
  // Doing stuff with model object here
}
Run Code Online (Sandbox Code Playgroud)

我遇到的第一个问题是"#selector'的参数'没有引用'@Objc'方法,属性或初始值设定项.

很酷,所以我将@objc添加到handleTap签名:

@objc func handleTap(modelObj: Model) {
  // Doing stuff with model object here
}
Run Code Online (Sandbox Code Playgroud)

现在我收到错误"方法无法标记为@objc,因为参数的类型无法在Objective-C中表示.

它只是建筑物地图的图像,其中一些图像指示了兴趣点的位置.当用户点击这些引脚中的一个时,我想知道他们挖掘了哪个兴趣点,并且我有一个描述这些兴趣点的模型对象.我使用这个模型对象给它在地图上的坐标图像,所以我认为将对象发送到手势处理程序是很容易的.

selector uikit ios swift

53
推荐指数
4
解决办法
7万
查看次数

将给定的 Publishers 失败类型设置为 Never in Combine

有没有办法将给定转换AnyPublisher<AnyType, SomeError>AnyPublisher<AnyType, Never>

frp ios swift combine

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

程序化嵌入转场

我正在使用页面视图控制器在我的应用程序中实现图像轮播。我在我的父视图控制器中有一个容器视图,它有一个嵌入页面视图控制器的 segue。我遇到的问题是当我需要关闭并异步获取这些图像时,segue 发生在 viewDidLoad 获取图像之前。

我准备转场:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  if segue.identifier == "startCarousel" {
    let carouselPageViewController = segue.destination as! CarouselPageViewController
    carouselPageViewController.images = carouselImages
  }
}
Run Code Online (Sandbox Code Playgroud)

在视图DidLoad中:

GalleryManager.sharedInstance.getData = {
  (data) in
  // Assign images to instance property here ...      
}
Run Code Online (Sandbox Code Playgroud)

我的想法是,一旦我获得图像,我就可以自己以编程方式启动 segue。或者,如果我应该以不同的方式这样做,任何建议将不胜感激。

uikit ios segue uistoryboardsegue swift

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

如何在合并中平面映射具有不同故障类型的两个发布者

我在我的 Rx 代码中遵循一个模式,我通常有一个 Observable 触发器,我 flatMap 为网络请求创建另一个 Observable。一个简化的例子:

enum ViewModelError: Error {
  case bang
}

enum DataTaskError: Error {
  case bang
}

func viewModel(trigger: Observable<Void>,
               dataTask: Observable<Result<SomeType, DataTaskError>>) -> Observable<Result<AnotherType, ViewModelError>> {
  let apiResponse = trigger
    .flatMap { dataTask }
}
Run Code Online (Sandbox Code Playgroud)

我遇到了一些麻烦的Combine等价物。我可以使用 Result 作为输出类型,使用 Never 作为失败类型,但这感觉像是对 API 的滥用。

func viewModel(trigger: AnyPublisher<Void, Never>,
               dataTask: AnyPublisher<SomeType, DataTaskError>) -> AnyPublisher<AnotherType, ViewModelError> {
  let apiResponse = trigger
    .flatMap { dataTask }
}
Run Code Online (Sandbox Code Playgroud)

我收到编译错误:

Instance method 'flatMap(maxPublishers:_:)' requires the types 'Never' and 'DataTaskError' be equivalent …
Run Code Online (Sandbox Code Playgroud)

frp ios swift combine

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

为什么二进制数几乎总是按 4 位分组?

我正在学习 ARM,因此回到二进制/十六进制算术的基础知识,这让我开始思考二进制数通常如何以 4 为一组呈现,例如

1111 1110 1101 1100

Is there a particular reason why it's done this way? Seeing as we normally describe memory in terms of bits/bytes/megabytes etc I'd have thought they'd be better grouped by 8?

binary assembly hex nibble

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

RxSwift中Disposables.create()的目的

我正在学习RxSwift,在创建Observable时遇到了以下模式:

return Observable.create { observer in

    let disposable = Disposables.create()

    // Do some stuff with observer here

    return disposable
}
Run Code Online (Sandbox Code Playgroud)

据我所知,返回的Disposable实际上没有做任何事情,它是否满足了API返回Disposable的要求以外的目的?

在任何情况下,您可能需要返回已配置的Disposable?

我想最让我困惑的是,返回的Disposable似乎与正在创建的Observable的实现是分开的,即它没有分配给任何属性,也没有传递给它刚刚创建并返回的任何地方。

ios swift rx-swift

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

每个目标有多个配置文件

在 Xcode 中,我可以将单个 xcconfig 文件分配给我的项目和目标:

目标选择

有没有办法将多个 xcconfig 文件分配给一个目标?在下拉菜单中它只允许一个选择。

我知道我可以在我的目标配置文件中覆盖我的项目配置文件中的构建设置,我遇到了一个问题,我可能需要为环境(开发、QA、生产)进行单独的配置,并为不同的配置单独配置应用程序的“风格”,因此能够为每个目标拥有多个配置文件似乎是一个潜在的解决方案。

xcode ios

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

标签 统计

ios ×6

swift ×5

combine ×2

frp ×2

uikit ×2

assembly ×1

binary ×1

hex ×1

nibble ×1

rx-swift ×1

segue ×1

selector ×1

uistoryboardsegue ×1

xcode ×1