小编Chr*_*ore的帖子

Swift 4 Decodable - 以enum为关键字典

我的数据结构有一个枚举作为键,我希望下面自动解码.这是一个错误还是一些配置问题?

import Foundation

enum AnEnum: String, Codable {
  case enumValue
}

struct AStruct: Codable {
  let dictionary: [AnEnum: String]
}

let jsonDict = ["dictionary": ["enumValue": "someString"]]
let data = try! JSONSerialization.data(withJSONObject: jsonDict,     options: .prettyPrinted)
let decoder = JSONDecoder()
do {
  try decoder.decode(AStruct.self, from: data)
} catch {
  print(error)
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误就是这个,似乎把dict与数组混淆了.

typeMismatch(Swift.Array,Swift.DecodingError.Context(codingPath:[Optional(__ lldb_expr_85.AStruct.(CodingKeys in _0E2FD0A9B523101D0DCD67578F72D1DD).dictionary)],debugDescription:"预计会解码数组,但会找到一个字典."))

swift codable

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

使用Generic和Protocol作为类型参数之间的区别,在函数中实现它们的优缺点是什么

由于Swift允许我们在函数中使用Protocol和Generic作为参数类型,因此我想到了下面的场景:

protocol AProtocol {
    var name: String{ get }
}

class ClassA: AProtocol {
    var name = "Allen"
}

func printNameGeneric<T: AProtocol>(param: T) {
    print(param.name)
}

func printNameProtocol(param: AProtocol) {
    print(param.name)
}
Run Code Online (Sandbox Code Playgroud)

第一个函数使用generic作为带有类型约束的参数类型,第二个函数直接使用protocol作为参数类型.但是,这两个函数可以产生相同的效果,这一点让我感到困惑.所以我的问题是:

  1. 每种情况的具体情况是什么(或者只能通过特定情况而不是另一种情况进行的情况)?

  2. 对于给定的情况,两个函数都得出相同的结果.哪一个更好实现(或者每个的优点和缺点)?

这个伟大的演讲提到了泛型专业化,这是一种优化,它将函数调度的方式从动态调度(具有非泛型参数的函数)转变为静态调度内联(具有泛型参数的函数).由于静态调度内联动态调度相比成本较低,因此使用泛型实现函数总能提供更好的性能.

@Hamish在这篇文章中也提供了很多信息,请查看更多信息.

这是一个新的问题来找我:

struct StructA: AProtocol {
    var a: Int
}

struct StructB: AProtocol {
    var b: Int
}

func buttonClicked(sender: UIButton) {
    var …
Run Code Online (Sandbox Code Playgroud)

generics parameters protocols swift

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

使用字典/数组初始化符合Codable的对象

主要是我的用例是使用字典创建对象:例如

struct Person: Codable { let name: String }    
let dictionary = ["name": "Bob"]
let person = Person(from: dictionary)    
Run Code Online (Sandbox Code Playgroud)

我想避免编写自定义实现,并希望尽可能高效.

swift codable

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

如何创建要在运行时着色的模板图像

我有一个几乎是平面颜色的图像.它附着但是纯白色,所以你不能轻易看到它.

样本图片 我希望能够在运行时动态地为该图像着色,但我需要在iOS 6中不使用UIImageRenderingModeAlwaysTemplate.

图像将全部以纯白色开始,具有圆角的小渐变.

到目前为止,我最好的尝试是在UIImage上使用GPUImage和一个类别

@implementation UIImage (BPAdditions)

- (UIImage *)imageWithColor:(UIColor *)color
{

    GPUImageRGBFilter *stillImageFilter = [[GPUImageRGBFilter alloc] init];
    CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha =0.0;
    [color getRed:&red green:&green blue:&blue alpha:&alpha];
    stillImageFilter.red = red;
    stillImageFilter.green = green;
    stillImageFilter.blue = blue;
    GPUImageChromaKeyFilter *stillImageFilter2 = [[GPUImageChromaKeyFilter alloc] init];
    [stillImageFilter2 setColorToReplaceRed:0 green:0 blue:0];
    stillImageFilter2.thresholdSensitivity = 0.2;
    stillImageFilter2.smoothing = 0;
    UIImage *img = [stillImageFilter imageByFilteringImage:self];

    return [stillImageFilter2 imageByFilteringImage: img];
}
Run Code Online (Sandbox Code Playgroud)

这将是理想的,除非我使用RGB滤镜时将透明背景变为黑色.然后使用色度滤光片将其去除根据使用的颜色具有不同的质量.

目标颜色有可能是黑色,在这种情况下,该解决方案将完全失败.

image-processing objective-c uiimage ios gpuimage

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

iOS中的稀疏图像匹配

我正在构建一个iOS应用程序,作为一项关键功能,它结合了图像匹配.问题是我需要识别的图像是小型定向运动的10x10斑块,上面有简单的大文字.它们可以很反光并且在外面(因此光线条件会变化).样本图片

在此输入图像描述

池中最多将有15种这样的图像,我需要检测的是文本,以便记录用户所在的位置.

我面临的问题是,使用我尝试过的图像匹配软件,aurasma和稍微成功的arlabs,他们无法区分它们,因为它们主要用于处理详细图像.

我需要准确地检测出正在扫描的斑块,并考虑使用gps来优化选择,但我找到的唯一可靠方法是让用户手动输入文本.我们基于该产品的主要吸引力之一是能够检测到已经存在的这些图像,而不必设置任何其他材料.

任何人都可以建议一个可以工作的软件(就像iOS友好一样)或者一种对用户有效和互动/愉悦的检测方法.

样本环境:http: //www.orienteeringcoach.com/wp-content/uploads/2012/08/startfinishscp.jpeg

环境可以发生很大变化,基本上可以定位斑块的任何位置; 在树木繁茂或开阔地带的围栏,墙壁和柱子,但绝大多数在户外.

image-processing objective-c image-recognition static-libraries ios

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