我对 Dart 比较陌生,并且正在尝试对代数数据类型进行建模(例如 Swift 的具有关联值的枚举)。
但是,当我尝试检查值的运行时类型时,我看到了一些我不太了解的行为。考虑以下代码:
abstract class Fetchable<T> {
factory Fetchable.success(T object) = FetchableSuccess;
factory Fetchable.error(Error error) = FetchableError;
}
class FetchableSuccess<T> implements Fetchable<T> {
final T object;
const FetchableSuccess(this.object);
}
class FetchableError<T> implements Fetchable<T> {
final Error error;
const FetchableError(this.error);
}
void main() {
// ------------- CASE 1 -------------
final s = Fetchable.success("hi there");
print(s.runtimeType); // FetchableSuccess<dynamic>
print(s is FetchableSuccess); // true
print(s is FetchableSuccess<String>); // false
print(s is FetchableSuccess<dynamic>); // true
if (s is FetchableSuccess) {
print(s.object); …Run Code Online (Sandbox Code Playgroud) 我正在努力解决如何RichText处理包含其他RichText实例的嵌套跨度。只要用户不更改手机的默认字体大小,它就可以正常工作。但是如果他们改变了显示字体大小,事情就会开始出错。
考虑我正在解析一些看起来像这样的 HTML 的情况:
<underline><italic><bold>xxxxx</bold></italic></underline>
Run Code Online (Sandbox Code Playgroud)
这个概念可以模拟成一个TextSpan内TextSpan内TextSpan,所以我可能有一些人为的代码,看起来像:
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final inputText = 'The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.';
final initialSpan = TextSpan(text: inputText, style: TextStyle(color: Colors.black));
final boldText = _buildStyledElement(context, initialSpan, Style.bold);
final boldItalised = _buildStyledElement(context, WidgetSpan(child: boldText), Style.italic);
final boldItalisedUnderlined = _buildStyledElement(context, WidgetSpan(child: boldItalised), Style.underline);
return new Scaffold(
appBar: AppBar(title: …Run Code Online (Sandbox Code Playgroud) 我正在尝试向服务器发送一个非常具体的 HTTP 请求(即定义精确的HTTP 标头集),但NSURLSession不断“有帮助地”插入一堆 HTTP 标头,例如Accept、Accept-Language和Accept-Encoding。
考虑以下 Playground (Swift 2.x),它将请求发送到仅回显发送的 HTTP 标头的服务:
import Foundation
import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
let url = NSURL(string: "http://httpbin.org/headers")!
let request = NSMutableURLRequest(URL: url, cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 30000)
let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
let session = NSURLSession(configuration: configuration)
let task = session.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) in
print(NSString(data: data!, encoding: NSUTF8StringEncoding))
XCPlaygroundPage.currentPage.finishExecution()
}
task.resume()
Run Code Online (Sandbox Code Playgroud)
您可以看到发送了三个Accept标头。我怎样才能防止这种情况发生?
我尝试使用设置标题,request.setValue(nil, forHTTPHeaderField: "Accept-Language")但它被忽略了。尝试将其设置为"" …
我有一些如下所示的 JSON:
{
"name" : "Credit Card",
"code" : "AUD",
"value" : 1000
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 Moshi 将其解组为数据结构,例如:
data class Account(
@Json(name = "name")
val name: String,
@Json(name = "currency")
val currency: String,
@Json(name = "value")
val value: Int
)
Run Code Online (Sandbox Code Playgroud)
一切都运转良好。但是,我真的很想将currency和value参数提取到一个单独的Money对象中。所以我的模型看起来更像是:
data class Money(
@Json(name = "currency")
val currency: String,
@Json(name = "value")
val value: Int
)
data class Account(
@Json(name = "name")
val name: String,
@Json(name = "???")
val money: Money
)
Run Code Online (Sandbox Code Playgroud)
我面临的挑战是如何对事物进行注释,以便Money …
有谁有动态类型的工作attributedTitle的UIButton?考虑下面的超级简单代码:
let font = UIFont(name: "Helvetica", size: 14)!
let scaledFont = UIFontMetrics.default.scaledFont(for: font)
let button = UIButton(type: .custom)
button.titleLabel?.font = scaledFont
button.titleLabel?.adjustsFontForContentSizeCategory = true
let attributes: [NSAttributedString.Key: Any] = [ .font: scaledFont ]
let attributedText = NSAttributedString(string: "Press me", attributes: attributes)
button.setAttributedTitle(attributedText, for: .normal)
Run Code Online (Sandbox Code Playgroud)
如果我使用辅助功能检查器上下缩放字体大小,按钮的大小和标签文本不能正确缩放。
但是,如果我只是调用button.setTitle()传递一个普通字符串,动态类型缩放工作正常。
直接在 a 上对属性文本使用相同的模式UILabel效果很好......似乎只是当我将属性文本用于 aUIButton的标题时。
任何想法或建议都会很棒。谢谢
编辑:再戳一下后,看起来正在发生的事情是文本正在尝试缩放,但按钮的宽度/高度并没有随之增长。如果我将动态类型拨号到最大文本大小,然后创建屏幕并继续缩小字体大小,则它可以正常工作,因为按钮的宽度/高度约束设置为初始大值。但是如果我从一个小的动态类型设置开始并变大,按钮就不能适应文本大小的变化