我如何使用Codable解码JSON并在创建对象(而不是结构)时交叉引用它们?在这个例子中,我希望Painting该类具有Color在JSON中定义的对象数组.(我也希望能够将它们编码回JSON.)
额外奖励:在这种情况下,我宁愿选择Painting.colors非可选let属性而不是 var.我不希望它在创作后改变,我不希望它永远是零.(我宁愿使用空数组的默认值而不是nil.)
class Art: Codable {
var colors: [Color]?
var Paintings: [Painting]?
}
class Color: Codable {
var id: String?
var hex: String?
}
class Painting: Codable {
var name: String?
var colors: [Color]?
}
let json = """
{
"colors": [
{"id": "black","hex": "000000"
},
{"id": "red", "hex": "FF0000"},
{"id": "blue", "hex": "0000FF"},
{"id": "green", "hex": "00FF00"},
{"id": "yellow", "hex": "FFFB00"},
{"id": "orange", "hex": "FF9300"},
{"id": …Run Code Online (Sandbox Code Playgroud) 在由苹果arkit示例代码我得到类型(又名"阵列")的"[vector_float3]"这个误差值没有构件"高级",它正在与细9的XCode beta版或GM版本
我正在使用此代码
func hitTestWithFeatures(_ point: CGPoint, coneOpeningAngleInDegrees: Float,
minDistance: Float = 0,
maxDistance: Float = Float.greatestFiniteMagnitude,
maxResults: Int = 1) -> [FeatureHitTestResult] {
var results = [FeatureHitTestResult]()
guard let features = self.session.currentFrame?.rawFeaturePoints else {
return results
}
guard let ray = hitTestRayFromScreenPos(point) else {
return results
}
let maxAngleInDeg = min(coneOpeningAngleInDegrees, 360) / 2
let maxAngle = ((maxAngleInDeg / 180) * Float.pi)
let points = features.points
for i in 0...features.__count {
let feature = points.advanced(by: Int(i))
let featurePos = …Run Code Online (Sandbox Code Playgroud) 我收到此错误的原因是import Firebase:
无法构建Objective-C模块“ Firebase”
Xcode还抱怨FirebaseAnalytics说
找不到“ FirebaseAnalytics / FirebaseAnalytics.h”文件。
在更新到Swift 4之前,我的项目过去一直很好。
我正在通过Cocoapods版本1.4.0 beta 2使用最新版本的Firebase。
请问我有什么问题为什么当我为textfield bounds属性设置动画时,当我在textfield中输入时动画消失了?
代码如下:
// textField delegate
func textFieldDidBeginEditing(_ textField: UITextField) {
UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0, options: .curveEaseInOut, animations: {
textField.layer.shadowOpacity = 6
textField.bounds.size.width += 15
textField.bounds.size.height += 15
}, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
并请我如何解决这个问题
非常感谢
我在该领域相对较新,并且在如何获取当前领域的schemaVersion方面确实停留在这里。
我尝试了下面的代码来检查我的schemaVersion
let configCheck = Realm.Configuration();
let configCheck2 = Realm.Configuration.defaultConfiguration;
let schemaVersion = configCheck.schemaVersion
print("Schema version \(schemaVersion) and configCheck2 \(configCheck2.schemaVersion)")
Run Code Online (Sandbox Code Playgroud)
但是输出总是为零
Schema version 0 and configCheck2 0
Run Code Online (Sandbox Code Playgroud)
但是我已经在迁移时更改了schemaVersion
let config = Realm.Configuration(
schemaVersion: 2,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 2) {
// Nothing to do!
}
})
Realm.Configuration.defaultConfiguration = config
Run Code Online (Sandbox Code Playgroud)
schemaVersionAtPath(_:encryptionKey:error:).
Run Code Online (Sandbox Code Playgroud)
我不了解参数。 具有参数表的任何示例都将非常有帮助。
我想在xcode 9中实现可达性功能,但是在达到可达性类时出现此错误,如何解决此错误?“类型为“ SCNetworkReachability的值?” 没有成员“ takeRetainedValue””。这是我的代码
import UIKit
import Foundation
import SystemConfiguration
public class reachability {
class func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)).takeRetainedValue()
}
var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 {
return false
}
let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 …Run Code Online (Sandbox Code Playgroud) 我让这个问题不受特定上下文的限制,因为我相信这对其他人会有所帮助:
我有2个IB出口文本字段:
@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
Run Code Online (Sandbox Code Playgroud)
我希望能够禁用页面上的按钮,直到两个按钮都正确填写为止,以便在ViewDidLoad()中使用以下委托(我已经在我的VC中添加了TextFieldDelegate。)
override func viewDidLoad() {
textField1.delegate = self
textField2.delegate = self
}
Run Code Online (Sandbox Code Playgroud)
然后,我将使用一些功能来进行表单验证和采取特定的操作,但是为了简单起见,我们假设它只是打印到控制台。
我只想检查textField1中的验证,而不检查textField2中的验证。即,所需的输出是当用户开始编辑textField1时输出的内容,但是如果用户编辑textField2则不输出任何内容。
我目前正在使用:
func textFieldDidBeginEditing(_ textField1: UITextField) {
print("TextField did begin editing method called")
}
Run Code Online (Sandbox Code Playgroud)
但这是在编辑任一textField时输出的。
我以为我指定了_ textField1,所以不确定为什么两者都触发了它?
有一些答案可以解决Swift 3及更早版本的类似问题。特别是,有一个答案引用了此链接http://sourcefreeze.com/uitextfield-and-uitextfield-delegate-in-swift/,我发现它很有用,但仍然停留在此错误上。
我正在尝试为String该类创建一个内部函数,以仅获取AlphaNumeric字符并返回一个字符串。我在使用正则表达式将匹配项转换回字符串时遇到了一些错误。有人可以告诉我如何修复代码,或者有更简单的方法吗?
我想要这样的东西
let testString = "_<$abc$>_"
let alphaNumericString = testString.alphaNumeric() //abc
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有:
extension String {
internal func alphaNumeric() -> String {
let regex = try? NSRegularExpression(pattern: "[^a-z0-9]", options: .caseInsensitive)
let string = self as NSString
let results = regex?.matches(in: self, options: [], range: NSRange(location: 0, length: string.length))
let matches = results.map {
String(self[Range($0.range, in: self)!])
}
return matches.join()
}
}
Run Code Online (Sandbox Code Playgroud) 我正在和Swift玩耍,但遇到了一些麻烦flatMap。我已经看到了这个 StackOverflow问题,该问题描述了如何使用来展平数组的数组flatMap,但是当我在操场上重现相同的代码时,它并不会展平该数组。如果有人可以提供一些有关此处发生的情况的见解,我将不胜感激。