下面的代码适用于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中它应该是什么样的?
我得到的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)
谢谢你的帮助
此代码示例在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中运行?
如何用一根手指“触摸并拖动”旋转 SpriteNode,以便:
我尝试过的事情:
使用 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 …
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,但是找不到任何有用的东西.
这是正常的,我错过了什么吗?
在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修复此问题?
我有
@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) 问题是由于在情节提要中设置自定义颜色引起的,而该颜色与自定义字体无关。
步骤1:在“资产”文件夹中定义颜色
步骤2:将该颜色设置为标签文字颜色
步骤3:更改代码中的文字颜色
标签背景颜色正在更改,但文本颜色未更改
如何用动态类名调用类函数?
假设以下示例中我有两个类具有相同签名的方法
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 /库来实现这一目标,这就是一个探索性的问题.
swift4.1 ×10
swift ×7
ios ×5
ciimage ×1
core-image ×1
iphone ×1
json ×1
skspritenode ×1
sprite-kit ×1
uiimage ×1
xcode ×1
xcode10 ×1
xcode9.4 ×1