问题标签 [swift-extensions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
protocols - 在协议扩展中使用变异函数的 Swift 2 错误“不能在不可变值上使用变异成员:‘self’是不可变的
不知道这里发生了什么,这似乎应该很简单。我有一个可变 var 的协议,一个具有变异功能的扩展。testClass.testFunc中的事情正在崩溃,当我尝试使用扩展中声明的mtkAnimQueAppend时,我收到此错误:“不能在不可变值上使用变异成员:'self' 是不可变的。
arrays - 扩展 Swift 数组以按类型过滤元素
如何扩展 swift 数组以访问特定类型的成员?
如果数组包含从同一个超类继承的多个类的实例,则这是相关的。理想情况下,它将适当地强制执行类型检查。
一些不太奏效的想法和事情:
使用该filter(_:)
方法可以正常工作,但会强制执行类型安全。例如:
包含正确的filteredArray
值,但类型仍然[MyProtocol]
不是[TypeA]
。我希望用替换最后一个let filteredArray = myStructs.filter({ $0 is TypeA }) as! [TypeA]
可以解决这个问题,但是项目失败了EXEC_BAD_INSTRUCTION
,我不明白。也许类型转换数组是不可能的?
理想情况下,这种行为可以包含在数组扩展中。以下内容无法编译:
这里似乎至少存在两个问题:类型约束T:Element
似乎不起作用。我不确定添加基于泛型类型的约束的正确方法是什么。我的意思是说T
是Element
. 此外,第 3 行存在编译时错误,但这可能只是相同的错误传播。
ios - 无法在受其他协议限制的泛型类型上调用协议方法
我有以下内容:
我希望将Guard
协议分配给任意数量的不同类类型的对象,以及Prisoner
其他对象。充当守卫的对象将根据它们的类类型有自己的 smack 实现。smackAll
但我认为没有理由在每个可能继承的类中重新编写Guard
. 所以我试图这样做,但编译器不允许我这样做。我错过了什么?
ios - Objective-C 中的 SlideMenuControllerSwift 实现
我尝试在 Objective-c中添加SlideMenuControllerSwift 。
我可以在我的 AppDelegate.m中访问[slideMenuController openLeft]
SlideMenuControllerSwift具有UIViewController 扩展。
但是如何在 obj-c ViewController.m 中访问 toggleLeft() ?
swift - 在 Swift 中返回实例类型
我正在尝试进行此扩展:
但我得到编译错误:
错误:无法将“UIViewController”类型的返回表达式转换为“Self”类型
可能吗?我也想让它成为init(storyboardName: String, storyboardId: String)
objective-c - Accessing Obj-C properties in Swift extension file
I started writing Swift extensions on my view controllers. So I have three files right now:
My header file, ViewController.h
:
My Obj-C implementation file, ViewController.m
:
And finally, ViewController.swift
:
My question is, is it possible to access my Obj-C properties from my Swift implementation file? Every time I refer to it, I got an error:
Bonus 1: Can someone also clarify if the Swift component can see what the .m is a delegate of as well. (To clarify, doing scrollView.delegate = self
in Swift is a compile error because the Swift file does not realise that the .m file is a UIScrollViewDelegate).
Bonus 2: Can Swift extension file call Obj-C methods that are declared from the .m counterpart?
arrays - Swift 字典数组扩展 sortInPlace
使用 Swift 2.1 我正在尝试创建一个函数,该函数按键 dateKey 的日期值对字典数组进行排序。
我想将此作为 Array 类型的扩展添加,所以我可以使用它来调用它someArray.sortDictionariesByDate(dateKey: String, dateFormatter: NSDateFormatter)
只要将字典键入为 ,这就可以正常工作[String: AnyObject]
,但是如果我在类型的字典上使用它,[String: String]
它就不起作用,因为它无法转换String
为AnyObject
. 我认为这是因为String
is a Struct
not a Class
。我也尝试将元素类型转换为[String: Any]
,但无论使用类型为[String: AnyObject]
或的字典,它都不起作用[String: String]
。
是否有任何转换可以用来支持具有键类型String
和任何值类型(String
等AnyObject
)的字典,或者可以添加到扩展中以避免完全转换的 where 子句或协议一致性?
编辑:这是根据请求的两个示例数组
swift - 未能实现符合类型的协议扩展
(随时酌情重命名问题)
我正在处理大量 BLE 数据,出于调试目的,我发现UInt8
使用HEX
计算变量进行扩展很容易:
我发现自己想要一个小写的变体。UInt32
然后我也想要它UInt16
。由于唯一改变的是要打印的位数,我认为我可以使用某种协议来做到这一点(至少出于教育目的)。
然后是我想利用这一点并提供HEX
andhex
方法的默认实现的部分:
我得到一个编译器错误Argument type 'Self' does not conform to expected type 'CVarArgType'
。
我想我明白这一点。也就是说,作为一个协议,它不能保证采用的类型是CVarArgType
可以在 String 初始化器中使用的类型 ( ) 。所以我想我可以where
第一次使用子句。我修改了我的协议扩展,如下所示:
这导致Same-type requirement makes generic parameter 'Self' non-generic
. 在这一点上,我的业余类型理论家的理解溢出了。使我在不同 UInt 大小上的两种扩展方法起作用的魔力是什么?
swift - 如何将扩展中的字典解包为字典
我正在尝试将扩展中的字典解包为字典。但我遇到了一些问题,无法在任何地方找到答案。
我有一个获取字典的函数,在其中我想从 JSON 字典中获取一个 json 字符串,当然,如果它是一个有效的 JSON 对象:
但问题是我有一个var dict: Dictionary<String, AnyObject>
.
我也尝试过使用StringLiteralConvertible
但后来我得到两个错误。我怎样才能让它工作?
swift - 键盘扩展中的 UICollectionview
我试图将 UICollectionview 放入我的键盘扩展中,这是我快速制作的。但我无法让它工作。键盘只是在启动时崩溃。有人知道怎么修这个东西吗?或者甚至可以在键盘扩展中使用 UICollectionview。
类键盘视图控制器:UIInputViewController,UICollectionViewDelegateFlowLayout,UICollectionViewDataSource{
}