标签: swift4

在Swift 4中,如何使用Codable解码JSON并在解码对象之间创建引用?

我如何使用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)

json swift swift4 codable

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

无法将模块'Arkit'加载为'ARKit'

在此输入图像描述

即使在链接的框架和库中添加了Arkit模块也没有加载.

swift swift4 ios11 arkit

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

类型'[vector_float3]'(又名'Array <float3>')的值没有成员'advanced'

在由苹果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)

swift4 arkit

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

无法构建Objective-C模块“ Firebase”

我收到此错误的原因是import Firebase

无法构建Objective-C模块“ Firebase”

Xcode还抱怨FirebaseAnalytics说

找不到“ FirebaseAnalytics / FirebaseAnalytics.h”文件。

在更新到Swift 4之前,我的项目过去一直很好。

我正在通过Cocoapods版本1.4.0 beta 2使用最新版本的Firebase。

firebase swift4

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

动画TextField在Swift中消失了

请问我有什么问题为什么当我为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)

并请我如何解决这个问题

非常感谢

swift3 swift4

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

在Swift 4.0中找到领域的schemaVersion

我在该领域相对较新,并且在如何获取当前领域的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)

我不了解参数。 具有参数表的任何示例都将非常有帮助。

realm ios swift swift4

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

Swift 4 XCode 9中的可达性功能

我想在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)

xcode reachability wkwebview swift4

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

Swift 4-仅将一个文本字段标识为委托进行editDidEnd等

我让这个问题不受特定上下文的限制,因为我相信这对其他人会有所帮助:

我有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/,我发现它很有用,但仍然停留在此错误上。

ios swift swift4

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

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)

regex swift swift4

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

Swift 4-FlatMap无法展平数组

我正在和Swift玩耍,但遇到了一些麻烦flatMap。我已经看到了这个 StackOverflow问题,该问题描述了如何使用来展平数组的数组flatMap,但是当我在操场上重现相同的代码时,它并不会展平该数组。如果有人可以提供一些有关此处发生的情况的见解,我将不胜感激。

这是代码和结果的屏幕截图:在此处输入图片说明

arrays flatmap swift swift4

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

标签 统计

swift4 ×10

swift ×6

arkit ×2

ios ×2

arrays ×1

codable ×1

firebase ×1

flatmap ×1

ios11 ×1

json ×1

reachability ×1

realm ×1

regex ×1

swift3 ×1

wkwebview ×1

xcode ×1