注:有帐目标下用一个类似的问题在这里,但我想实现它迅速。
我有一个这样迅速宣布的课程:
import UIKit
class EachDayCell : UITableViewCell
{
@IBOutlet var dateDisplayLabel : UITextField
@IBOutlet var nameDisplayLabel : UITextField
@IBAction func goToPendingItems(sender : AnyObject) {
}
@IBAction func showDateSelectionPicker(sender : AnyObject) {
}
init(style: UITableViewCellStyle, reuseIdentifier: String!)
{
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
}
现在,我想快速注册一个数组:dateDisplayLabel,nameDisplayLabel。
我该如何实现?
Mirror
这是一个纯粹的Swift解决方案,但有一些限制:
protocol PropertyNames {
func propertyNames() -> [String]
}
extension PropertyNames
{
func propertyNames() -> [String] {
return Mirror(reflecting: self).children.flatMap { $0.label }
}
}
class Person : PropertyNames {
var name = "Sansa Stark"
var awesome = true
}
Person().propertyNames() // ["name", "awesome"]
局限性:
将不返回计算的属性,即:
var favoriteFood: String { return "Lemon Cake" }
如果self
是类的实例(相对于结构),则不会报告其超类的属性,即:
class Person : PropertyNames {
var name = "Bruce Wayne"
}
class Superhero : Person {
var hasSuperpowers = true
}
Superhero().propertyNames() // [“hasSuperpowers”] — no “name”
您可以superclassMirror()
根据所需的行为来解决此问题。
class_copyPropertyList
如果使用的是Objective-C对象,则可以使用以下方法:
var count = UInt32()
let classToInspect = NSURL.self
let properties : UnsafeMutablePointer <objc_property_t> = class_copyPropertyList(classToInspect, &count)
var propertyNames = [String]()
let intCount = Int(count)
for var i = 0; i < intCount; i++ {
let property : objc_property_t = properties[i]
guard let propertyName = NSString(UTF8String: property_getName(property)) as? String else {
debugPrint("Couldn't unwrap property name for \(property)")
break
}
propertyNames.append(propertyName)
}
free(properties)
print(propertyNames)
到控制台的输出是否classToInspect
为NSURL
:
["pathComponents", "lastPathComponent", "pathExtension", "URLByDeletingLastPathComponent", "URLByDeletingPathExtension", "URLByStandardizingPath", "URLByResolvingSymlinksInPath", "dataRepresentation", "absoluteString", "relativeString", "baseURL", "absoluteURL", "scheme", "resourceSpecifier", "host", "port", "user", "password", "path", "fragment", "parameterString", "query", "relativePath", "hasDirectoryPath", "fileSystemRepresentation", "fileURL", "standardizedURL", "filePathURL"]
这在操场上行不通。只需替换NSURL
为EachDayCell
(或重用与扩展相同的逻辑),它就可以工作。
问题内容: 迅速有没有通过声明?例如,如果我执行以下操作 案例“一”和案例“二”是否可以执行相同的代码? 问题答案: 是。您可以按照以下方式进行操作: 另外,您可以使用关键字:
问题内容: 我想要一个数字数组上的函数(或任何可加的事物的有序集合),该函数返回长度相同的数组,其中每个元素是A中所有元素的总和, 直到一个include。 例子: 我可以使用for循环或其他方式执行此操作。还有更多功能选择吗?它有点像reduce,只是它会构建一个包含所有中间值的结果数组。 更通用的是具有可以接受任何序列并提供输入序列的总运行时间的函数。 问题答案: 您正在寻找的通用组合器通常称
问题内容: 如何迅速地建立代表? 问题答案: 它与obj-c没什么不同。首先,您必须在类声明中指定协议,如下所示: 该实现将如下所示: 当然,您必须设置委托。例如:
问题内容: 我在这里有Swift的String类的扩展,该扩展返回给定子字符串的第一个字母的索引。 谁能帮我做到这一点,这样它将返回所有出现的数组,而不仅仅是第一个出现的数组? 谢谢。 例如,除了返回值,我想要类似 问题答案: 您只是不断扩大搜索范围,直到找不到子字符串的任何更多实例:
问题内容: 我希望有人可以帮助我。我试图允许用户捏UIImageView(允许最大和最小级别)上的缩放。但是由于某种原因,它无法正常工作。图像会稍微放大,然后反弹。谢谢。 这是变焦功能 问题答案: 我决定将imageView添加到UIScrollView中。它允许用户缩放和平移。这是我使用的代码。 为了设置最大/最小缩放,我使用了: 这是其余的代码。 我也必须添加它 Swift 3及以上功能原型
问题内容: 所以我有这样的prepareForSegue方法: 但是,在运行时,应用程序崩溃并记录了以下消息: 无法转换类型为’UINavigationController’的值 出现错误是因为addEventController嵌入在导航控制器中,但是我不确定如何设置segue,以便将destinationViewController设置为NavigationController,但还允许我将p