标签: swift4.1

如何在Swift 4.1中将混合值类型字典编码为JSON

下面的代码适用于Xcode 9.2(Swift 4.0),但在Xcode 9.3(Swift 4.1)中出现错误.

let dict: [String: Any] = [
    "status_code": 5,
    "status_message": "message"
]

let data = try! JSONEncoder().encode(dict)
                           // ^  generic parameter 'T' could not be inferred
Run Code Online (Sandbox Code Playgroud)

我已经尝试制作字典[String: Encodable],并使用typealias两种字典类型,具有相同的结果.Swift不允许您在泛型调用中指定类型,因此会产生编译器错误.在Swift 4.1中它应该是什么样的?

json swift swift4.1

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

Swift 4.1 - 子类UIImage

我得到的Overriding non-@objc declarations from extensions is not supported错误,当升级到4.1雨燕后子类UIImage的自定义的init

class Foo: UIImage {

    init(bar: String) { }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    // Overriding non-@objc declarations from extensions is not supported
    required convenience init(imageLiteralResourceName name: String) {
        fatalError("init(imageLiteralResourceName:) has not been implemented")
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

uiimage swift swift4.1

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

Swift 4.1无法获得此NSImage的位图表示

此代码示例在macOS playground中运行:

import Cocoa

import XCPlayground

func getResImg(name: String, ext: String) -> CIImage {
   guard let fileURL = Bundle.main.url(forResource: name, withExtension: ext) else {
    fatalError("can't find image")
   }
   guard let img = CIImage(contentsOf: fileURL) else {
    fatalError("can't load image")
   }
   return img

}

var img = getResImg(name: "noise", ext: "jpg")
Run Code Online (Sandbox Code Playgroud)

升级到Swift 4.1后它没有.错误:无法获取此NSImage的位图表示.

它现在如何在Swift 4.1中运行?

core-image ciimage swift4.1

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

Xcode10:操作无法完成。(DVTCoreSimulatorAdditionsErrorDomain错误0。)

我试过了:

  • 重新启动模拟器和Xcode
  • 删除Xcode并重新安装
  • 运行xcrun simctl清除所有此命令

我已经尝试但无法解决此问题

在此处输入图片说明

xcode ios swift4.1 xcode10

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

如何用一根手指“触摸并拖动”旋转 SpriteNode

如何用一根手指“触摸并拖动”旋转 SpriteNode,以便:

  • 它不会晃来晃去
  • 它围成一圈(我已经成功地完成了这部分几次 - 仅使用代码解决方案和使用 SKS 文件)
  • 它产生一个有意义的值(就像物理控制旋钮一样)
  • 当我的手指在它上面时它会移动但当我的手指离开时它不会

我尝试过的事情:

使用 CGAffineTransform 的 CGAffineTransformMakeRotation来影响 SpriteKit 中旋钮的旋转。但我无法弄清楚如何在 SpriteNode 上使用 CGAffineTransformMakeRotation。我可以将不同类型的对象放入我的场景中或在它上面,但这是不对的。

例如,Matthijs Hollemans 的 MHRotaryKnob https://github.com/hollance/MHRotaryKnob 。我将 Hollemans 旋钮从 Objective C 转换为 Swift 4,但在尝试在 SpriteKit 中使用它来旋转精灵时遇到了麻烦。我不明白,因为我不知道如何knobImageView.transform = CGAffineTransformMakeRotation (newAngle * M_PI/180.0);在 Swift 中使用 SpriteKit。我知道我可以使用 Hollemans Objective C 类并将 UIImage 推送到我的场景顶部,但这似乎不是最好也最优雅的解决方案。

我还将Wex的解决方案从 Objective C 翻译成 Swift Rotate image on center using a finger touch Using Allan Weir的关于处理代码中 CGAffineTransform 部分的建议/sf/answers/2920685281/ 但是那不起作用。

我试过直接在我的精灵上设置zRotation而不使用 .physicalBody …

ios sprite-kit skspritenode swift swift4.1

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

通过使用Where子句创建扩展名,无法符合协议

protocol Typographable {
    func setTypography(_ typography: Typography)
}

extension UILabel: Typographable {}

extension Typographable where Self == UILabel {

    func setTypography(_ typography: Typography) {

        self.font = typography.font
        self.textColor = typography.textColor
        self.textAlignment = typography.textAlignment
        self.numberOfLines = typography.numberOfLines
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个协议Typographable,UILabel实现了这个协议,并且实现在extension Typographable where Self == UILabel.

它在swift 4.0中完美运行,但它在swift 4.1中不再起作用,错误信息是 Type 'UILabel' does not conform to protocol 'Typographable'

我仔细阅读了swift 4.1 的CHANGELOG,但是找不到任何有用的东西.

这是正常的,我错过了什么吗?

swift swift4.1

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

错误:变量在其自身的初始值中与type(of :)函数一起使用

在Apple的Swift标准文档中

func printInfo(_ value: Any) {
   let type = type(of: value)
   print("'\(value)' of type '\(type)'")
}
Run Code Online (Sandbox Code Playgroud)

并给出错误:变量在其自己的初始值内使用

在此处输入图片说明

如何使用Swift 4.1修复此问题?

swift swift4.1

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

UITextView 中的文本更改事件

我有

@IBOutlet weak var messageTextView: UITextView
Run Code Online (Sandbox Code Playgroud)

我希望当文本内部发生变化时,然后打印到控制台:blabla

我尝试添加以下功能,但是当我更改文本时没有任何反应:

func textViewDidChange(_ textView: UITextView) {
    switch (textView) {
        case messageTextView: print("blabla")
        default: break
    }
}
Run Code Online (Sandbox Code Playgroud)

ios swift swift4.1

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

如果我在nib中设置文本颜色并在资源中定义该颜色,则UILabel文本颜色不会以编程方式更改

问题是由于在情节提要中设置自定义颜色引起的,而该颜色与自定义字体无关。

步骤1:在“资产”文件夹中定义颜色

在此处输入图片说明

步骤2:将该颜色设置为标签文字颜色

在此处输入图片说明

步骤3:更改代码中的文字颜色

在此处输入图片说明

标签背景颜色正在更改,但文本颜色未更改

iphone ios swift4.1 xcode9.4

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

在swift中调用具有动态类名的方法

如何用动态类名调用类函数?

假设以下示例中我有两个类具有相同签名的方法

class Foo{
   class func doSomething()

}

class Foobar {
   class func doSomething()
}

class ActualWork{
   //call following method with a variable type so that it accepts dynamic class  name
   func callDynamicClassMethod(x: dynamicClass)
    x.doSomething() 
  }
Run Code Online (Sandbox Code Playgroud)

如何实现这一点,以便x在运行时接受值

编辑:对不起,我错过了提到我正在寻找除协议导向方法以外的任何其他方式.如果有更直接的方法/ pods /库来实现这一目标,这就是一个探索性的问题.

ios swift swift4.1

5
推荐指数
2
解决办法
558
查看次数